Ответ кастомного диалога

KtotoTama

Участник
Автор темы
39
4
Версия MoonLoader
.026-beta
Lua:
sampShowDialog(6100, 'ЗАГОЛОВОК', 'ВАРИАНТ 1' .. "\n" .. 'ВАРИАНТ 2' .. "\n" .. 'ВАРИАНТ 3', "Выбрать", "Закрыть", 2) -- 2: список

local result, button, list

while sampIsDialogActive(6100) do wait(0) end
       
local result, button, list, input = sampHasDialogRespond(MODE_MENU_ID)

print("result =", result) // true
print("button =", button) // 255
print("list   =", list) // -1
print("input  =", input) // пусто

Почему у меня кнопка возвращается как 255? Не важно какую нажал. Всегда 255. Как мне получить какой вариант выбрал пользователь?
 
Решение
Когда ты жмёшь кнопку в диалоге, самп на долю секунды записывает это в память. Функция sampHasDialogRespond это как раз твой поисковик, который лезет в эту память и забирает инфу. Твой цикл while sampIsDialogActive ждал, пока диалог полностью пропадёт с экрана. Но как только он пропал, память очистилась. Скрипт просыпается, лезет туда, а там уже шаром покати. Вот игра и отдавала тебе заглушку 255 и -1. Цикл должен крутится, пока диалог открыт, и проверять память каждые 0 миллисекунд (wait(0)). Игрок кликает а скрипт в ту же миллисекунду перехватывает данные, выдаёт тебе нормальные цифры и только потом закрывает цикл через break


Lua:
sampShowDialog(6100, 'ЗАГОЛОВОК', "ВАРИАНТ 1\nВАРИАНТ 2\nВАРИАНТ 3", "Выбрать", "Закрыть", 2)

-- Тут мы...

kyrtion

\0
Проверенный
1,515
616
Попробуй
 

SNAPE

Участник
88
4
Когда ты жмёшь кнопку в диалоге, самп на долю секунды записывает это в память. Функция sampHasDialogRespond это как раз твой поисковик, который лезет в эту память и забирает инфу. Твой цикл while sampIsDialogActive ждал, пока диалог полностью пропадёт с экрана. Но как только он пропал, память очистилась. Скрипт просыпается, лезет туда, а там уже шаром покати. Вот игра и отдавала тебе заглушку 255 и -1. Цикл должен крутится, пока диалог открыт, и проверять память каждые 0 миллисекунд (wait(0)). Игрок кликает а скрипт в ту же миллисекунду перехватывает данные, выдаёт тебе нормальные цифры и только потом закрывает цикл через break


Lua:
sampShowDialog(6100, 'ЗАГОЛОВОК', "ВАРИАНТ 1\nВАРИАНТ 2\nВАРИАНТ 3", "Выбрать", "Закрыть", 2)

-- Тут мы запускаем цикл и ловим клик прямо в прямом эфире
while true do
    wait(0)
 
    local result, button, list, input = sampHasDialogRespond(6100)
    
    if result then
        
        print("Кнопка:", button) -- 1 = Левая (Выбрать), 0 = Правая (Закрыть) или ESC
        print("Строчка:", list)   -- 0 = Первая строка, 1 = Вторая, 2 = Третья
        
        if button == 1 then -- Если нажал "Выбрать"
            if list == 0 then
                sampAddChatMessage("Ты тыкнул на первый вариант", -1)
            elseif list == 1 then
                sampAddChatMessage("Ты тыкнул на второй вариант", -1)
            end
        else -- Если нажал "Закрыть" или бахнул ESC
            sampAddChatMessage("Ты просто закрыл менюшку", -1)
        end
        
        break
    end
end
 
  • Нравится
Реакции: KtotoTama