Взаимодействие с диалогами

Scra1chy

Известный
Автор темы
36
2
Приветствую. Как взаимодействовать с диалогамми?) Что бы при выборе пункта открывался другой диалог..., выполнялось такое то действие и.т.д. Не смог найти(
 

James Hawk

Известный
919
217
1. Событие onShowDialog(id, style, title, button1, button2, text) [samp events]
2. Взаимодействие с элементами диалога - sampSendDialogResponse(dialog_id, button, item, input)
3. Создание своего диалога sampShowDialog(dialog_id, title, text, button1, button2, dialog_style)
Первое что сразу приходит в голову
Искал очень плохо
 
  • Нравится
Реакции: Scra1chy

Scra1chy

Известный
Автор темы
36
2
1. Событие onShowDialog(id, style, title, button1, button2, text) [samp events]
2. Взаимодействие с элементами диалога - sampSendDialogResponse(dialog_id, button, item, input)
3. Создание своего диалога sampShowDialog(dialog_id, title, text, button1, button2, dialog_style)
Первое что сразу приходит в голову
Искал очень плохо
Извиняюсь за дикий тупизм, но можно объяснить как:
При выборе в диалоге нужного пункта и нажатии нужной кнопки происходило нужное действие?
Например:
1) При вводе /d - открывался диалог (реализовано)
2) При выборе например 1-ого пункта в диалоге с id1, открывался следующий диалог с id2, а затем при выборе какого либо пункта в 2ом диалоге, происходило любое действие...

Увы, не очень понял как это реализовать :(


Lua:
function dialog()
    lua_thread.create(function()
        sampShowDialog(1, "Traffic-Stop Menu", "Взаимодействие при 10'55\nСмягчить меру пресечения\nНазначить Unit", "Открыть", "Закрыть", 2)
        wait(1000)
        if sampSendDialogResponse(1, 0, 0, "?") then
            sampShowDialog(2, "Traffic-Stop Menu 10'55", "Начало 10'55\nОкончание 10'55\n10'57 V", "Выбрать", "Назад", 2)
        else
            print("Не сработало :(")
        end
    end)
end
 

DarkTX

Известный
96
15
Скидываю пример, дальше сам поймёшь. Это для диалогов, который ты сам создал. (для серверных диалогов - ответ выше).
В main():
Lua:
while true do
    wait(0)
    local current_dialog = sampGetCurrentDialogId()
    local result, button, list, input = sampHasDialogRespond(current_dialog)
    if current_dialog == DIALOG_TEST then
        if result and button == 1 and list ~= 0 then
            sampSendChat(string.format("/re %i", players[list][1]))
        end
    end
end
 
  • Нравится
Реакции: Scra1chy

James Hawk

Известный
919
217
Извиняюсь за дикий тупизм, но можно объяснить как:
При выборе в диалоге нужного пункта и нажатии нужной кнопки происходило нужное действие?
Например:
1) При вводе /d - открывался диалог (реализовано)
2) При выборе например 1-ого пункта в диалоге с id1, открывался следующий диалог с id2, а затем при выборе какого либо пункта в 2ом диалоге, происходило любое действие...

Увы, не очень понял как это реализовать :(


Lua:
function dialog()
    lua_thread.create(function()
        sampShowDialog(1, "Traffic-Stop Menu", "Взаимодействие при 10'55\nСмягчить меру пресечения\nНазначить Unit", "Открыть", "Закрыть", 2)
        wait(1000)
        if sampSendDialogResponse(1, 0, 0, "?") then
            sampShowDialog(2, "Traffic-Stop Menu 10'55", "Начало 10'55\nОкончание 10'55\n10'57 V", "Выбрать", "Назад", 2)
        else
            print("Не сработало :(")
        end
    end)
end
Пример
Lua:
sampSendDialogResponse(5, 1, 2, -1) -- айди диалога 5, выбираем 3 элемент в списке (3-1=2), нажимаем клавишу "ок" после выбора (это единица в коде), -1 - не вводит никакого текста (если хотим ввести текст -1 заменяем на текст)
 
  • Нравится
Реакции: Scra1chy

James Hawk

Известный
919
217
Если после нажатия на серверный диалог хочешь создавать свой диалог - нужно сделать чуть иначе
Lua:
local result, button, list, input = sampHasDialogRespond(dialog_id)
if result and button == 1 then -- если диалог активен и нажата кнопка "ок"
   -- создание диалога
end

он это не просил
Ну, во-первых, стоит одеть очки и перечитать сообщение автора темы. Во-вторых, если уж ты решил, что здесь что-то указано "не в тему" - предложи свой вариант, а не набивай посты
 
463
825
Ну, во-первых, стоит одеть очки и перечитать сообщение автора темы. Во-вторых, если уж ты решил, что здесь что-то указано "не в тему" - предложи свой вариант, а не набивай посты
1. он не писал, что ему нужны серверные диалоги. он спросил, как при нажатии на созданный им диалог выполнить какое-то действие.
2. зачем, если DarkTX скинул решение
 

Scra1chy

Известный
Автор темы
36
2
1. он не писал, что ему нужны серверные диалоги. он спросил, как при нажатии на созданный им диалог выполнить какое-то действие.
2. зачем, если DarkTX скинул решение
Если после нажатия на серверный диалог хочешь создавать свой диалог - нужно сделать чуть иначе
Lua:
local result, button, list, input = sampHasDialogRespond(dialog_id)
if result and button == 1 then -- если диалог активен и нажата кнопка "ок"
   -- создание диалога
end


Ну, во-первых, стоит одеть очки и перечитать сообщение автора темы. Во-вторых, если уж ты решил, что здесь что-то указано "не в тему" - предложи свой вариант, а не набивай посты

Не сорьтесь) Мне нужны действия с локальными диалогами) Сервер жмот и от него мало чего получить возможно(

Скидываю пример, дальше сам поймёшь. Это для диалогов, который ты сам создал. (для серверных диалогов - ответ выше).
В main():
Lua:
while true do
    wait(0)
    local current_dialog = sampGetCurrentDialogId()
    local result, button, list, input = sampHasDialogRespond(current_dialog)
    if current_dialog == DIALOG_TEST then
        if result and button == 1 and list ~= 0 then
            sampSendChat(string.format("/re %i", players[list][1]))
        end
    end
end
А всё это возможно вставлять куда-либо ещё кроме main()? А то такими темпами мне main не хватит)
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,131
Во-вторых, если уж ты решил, что здесь что-то указано "не в тему" - предложи свой вариант, а не набивай посты
Объективно, набиваешь посты в данной теме только ты, так как ответ уже был дан, да и более не требовался.
А человек, которого ты обвиняешь, лишь сообщил тебе о том, что ответ более не требуется. Ничего необычного.
 

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,131
А всё это возможно вставлять куда-либо ещё кроме main()? А то такими темпами мне main не хватит)
Можно создавать потоки и вставлять это туда, также используя там бесконечный цикл.
Lua:
lua_theard.create(function()
   while true do
      wait(0)
      -- любое действие
   end
end)
 
  • Нравится
Реакции: Scra1chy

James Hawk

Известный
919
217
Не сорьтесь) Мне нужны действия с локальными диалогами) Сервер жмот и от него мало чего получить возможно(
Есть очень хорошее описание работы с диалогами от Фипа в сниппетах
https://blast.hk/threads/13380/
#17 коммент

Объективно, набиваешь посты в данной теме только ты, так как ответ уже был дан, да и более не требовался.
А человек, которого ты обвиняешь, лишь сообщил тебе о том, что ответ более не требуется. Ничего необычного.
Ты теперь будешь везде отвечать, где упоминаюсь я? Даже на стене удосужился ответить
 

Thief

Участник
108
12
Сорри за поднятие старой темы, но такой вопрос: есть два скрипта, в одном описан основной функционал, в другом дополнительный и дело в том, что в дополнительном при взаимодействии с диалогами и выборе listitem в нём не происходит ничего, но без основного скрипта всё работает идеально. То есть, допустим, мы имеем в папке и основной скрипт, и дополнительный, и если создать кмд в дополнительном, чтобы та просто открывала тебе диалог(клиентский) и при выборе любой строчки открывала ещё один диалог, то как раз новый диалог он просто не открывает и ничего не происходит, и так делается абсолютно с любым диалогом. Что можно предположить или сделать в этом случае? Никаких ошибок и нареканий в консоли сф на абсолютно все скрипты не наблюдал, даже после того, когда выбирал уже строчку в диалоге.
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
Сорри за поднятие старой темы, но такой вопрос: есть два скрипта, в одном описан основной функционал, в другом дополнительный и дело в том, что в дополнительном при взаимодействии с диалогами и выборе listitem в нём не происходит ничего, но без основного скрипта всё работает идеально. То есть, допустим, мы имеем в папке и основной скрипт, и дополнительный, и если создать кмд в дополнительном, чтобы та просто открывала тебе диалог(клиентский) и при выборе любой строчки открывала ещё один диалог, то как раз новый диалог он просто не открывает и ничего не происходит, и так делается абсолютно с любым диалогом. Что можно предположить или сделать в этом случае? Никаких ошибок и нареканий в консоли сф на абсолютно все скрипты не наблюдал, даже после того, когда выбирал уже строчку в диалоге.
мб у тебя команды, ID диалогов одинаковые? проверь