~LButton:: if (isDialogOpen()==0) { KeyWait, LButton } if (A_PriorHotkey <> "~LButton" or A_TimeSincePriorHotkey > 500) ; Проверяем нажато ли два раза ЛКМ за 500мс, если нет ждем второе нажатие и ретурним { KeyWait, LButton return } ; Если нажато два раза, то делаем то что ниже if (menu==1) ; Если "menu" равно 1 { menu:=0 ; деактивирует меню line:=getDialogLineNumber() ; В переменную "line" будет номер выбранной строки sleep, 100 ; задержка перед телепортом на метку (можно делать под себя) Gosub, menu_1_%line% ; переходит на мету выбранного пункта return }
menu_1_1: ; это Первая строка в 1 диалоге AntiCrash() SendChat("/r [Лекция]: Уважаемые сотрудники, хочу напомнить Вам:") Sleep 1600 SendChat("/r [Лекция]: Рабочий день с понедельника по пятницу с 10:00 до 18:00.") Sleep 1600 SendChat("/r [Лекция]: В субботу с 9:00 до 16:00.") Sleep 1600 SendChat("/r [Лекция]: В воскресенье выходной.") Sleep 1600 SendChat("/r [Лекция]: Обеденный перерыв с 14:00 до 15:00.") Sleep 1600 SendChat("/c 060") return return menu_1_2: ; это Вторая строка в 1 диалоге AntiCrash() SendChat("/r [Лекция]: Уважаемая охрана, минуточку внимания.") Sleep 1600 SendChat("/r [Лекция]: После рабочего дня Вы обязаны сдать амуницию на склад.") Sleep 1600 SendChat("/r [Лекция]: Замеченная охрана в амуниции после рабочего дня - будет уволена.") Sleep 1600 SendChat("/c 060") return return menu_1_3: ; это 3 строка в 1 диалоге AntiCrash() SendChat("/r [Лекция]: Уважаемые сотрудники, напоминаю Вам!") Sleep 1600 SendChat("/r [Лекция]: Рабочий транспорт разрешено брать только с разрешения старшего состава.") Sleep 1600 SendChat("/r [Лекция]: Кто возьмёт транспорт без разрешения - будет уволен.") Sleep 1600 SendChat("/c 060") Sleep 1600 return return menu_1_4: ; это 4 строка в 1 диалоге AntiCrash() SendChat("/r [Лекция]: Уважаемые сотрудники, минуточку внимания. Не забываем оставлять..") Sleep 1600 SendChat("/r [Лекция]: ..отчёт о проделанной работе за неделю на портале штата..") Sleep 1600 SendChat("/r [Лекция]: ..в разделе “Мэрия ЛВ”. Спасибо за внимание.") Sleep 1600 SendChat("/c 060") return
пытылся решить через
Код
if (isDialogOpen()==0) { KeyWait, LButton }
изменений никаких
Сообщение отредактировал ToPro - Вторник, 25.07.2017, 11:57
Martin_Self, ну.. Во-первых, эта тема не занимается ответами на вопросы не касаемо именно данной темы. Во-вторых, функу которую ты юзаешь - глупость, мне ее уже кидали, но очень много раз при выборе строки скрипт просто зависал ибо функа думала что диалог открыт или еще что-то. В-третьих, у тебя нету рядом со скриптом файла который ты инклудишь.
Phoenixxx_Czar, Не согласен. Для некоторых делать бинд на LButton, Enter, морочится с переменными не легкое занятие, а эта функа во многом облегчает эту работу и экономит лишние строки. Скрипт не может от нее зависнуть, там зациклена только проверка на открыт ли диалог.
Никогда не любил бинды на enter и прочее, ну ка посмотрите этот вариант, вроде бы работает, но если бы все так было просто, то давным-давно все до меня написали бы, какие проблемы можно встретить с таким вариантом, ну кроме проблем, что циклы создают?
Код
command_test: showdialog("2", "{FFFAFA}Список", "{fffafa}[1] - Действие 1`n[2] - Действие 2`n[3] - Действие 3", "Ok") num := waitforchooseindialog() if (num = 1) { addmessagetochatwindow2("{ff0000}", "[AHK] {FFFAFA}Действие 1") } else if (num = 2) { addmessagetochatwindow2("{ff0000}", "[AHK] {FFFAFA}Действие 2") } else if (num = 3) { addmessagetochatwindow2("{ff0000}", "[AHK] {FFFAFA}Действие 3") } else { addmessagetochatwindow2("{ff0000}", "[AHK] {FFFAFA}Ошибка") } return
WaitForChooseInDialog() { capt := getDialogCaption() Loop { if (isDialogOpen()) and (capt = getDialogCaption()) { LButton := GetKeyState("vk01", P) Enter := GetKeyState("vk0D", P)
if (LButton = 1) { sleep 200 num := getDialogLineNumber() if (!isDialogOpen()) { return, %num% } else { continue } }
if (Enter = 1) { num := getDialogLineNumber() sleep 200 if (!isDialogOpen()) { ; return, %num% } else if (isDialogOpen()) and (capt = getDialogCaption()) { continue } else if (isDialogOpen()) and (capt != getDialogCaption()) { continue } else { return, Error } } } else { return, Close } } }
Посмотрел, и вправду легкая функция. Но вот не задача: открой диалог, потом нажми F6, напиши /mm и нажми enter. Бац - у нас уже другой диалог открылся, но условие while isdialogopen() соблюдается и скрипт ждет.. ждет..
Нажимаю на клавиши, скрипт не работает в игре Вот код
#include SAMP-UDF-Developer.ahk ; UDF_037.ahk - это название файла UDF ~ESC:: ~F6:: menu:=0 ; Обнуляем меню при нажатии ESC и F6 return
F3:: ; Кнопка вызова диалога { menu:=1 ShowDialog("2", "Диалог 1", "Первая`nВторая","Отмена") ; Диалог return } F4:: ; Кнопка вызова диалога { menu:=2 ShowDialog("2", "Диалог 2", "Первая`nВторая","Отмена") ; Диалог return } ~LButton:: if (A_PriorHotkey <> "~LButton" or A_TimeSincePriorHotkey > 500) ; Проверяем нажато ли два раза ЛКМ за 500мс, если нет ждем второе нажатие и ретурним { KeyWait, LButton return } ; Если нажато два раза, то делаем то что ниже if (menu==1) ; Если "menu" равно 1 { menu:=0 ; деактивирует меню line:=getDialogLineNumber() ; В переменную "line" будет номер выбранной строки sleep, 100 ; задержка перед телепортом на метку (можно делать под себя) Gosub, menu_1_%line% ; переходит на мету выбранного пункта return } if (menu==2) ; Если "menu" равно 2 { menu:=0 ; деактивирует меню line:=getDialogLineNumber() ; В переменную "line" будет номер выбранной строки sleep, 100 ; задержка перед телепортом на метку (можно делать под себя) Gosub, menu_2_%line% ; переходит на мету выбранного пункта return } return
$~Enter:: ; при нажатии на Entrer if (menu==1) ; Если "menu"равно 1 { menu:=0 ; деактивирует меню line:=getDialogLineNumber() ; В переменную "line" будет номер выбранной строки sleep, 500 ; задержка перед телепортом на метку (можно делать под себя) Gosub, menu_1_%line% ; переходит на мету выбранного пункта return } if (menu==2) ; Если "menu" равно 2 { menu:=0 ; деактивирует меню line:=getDialogLineNumber() ; В переменную "line" будет номер выбранной строки sleep, 500 ; задержка перед телепортом на метку (можно делать под себя) Gosub, menu_2_%line% ; переходит на мету выбранного пункта return } return
menu_1_1: ; это Первая строка в 1 диалоге addChatMessage("Вы выбрали первую строку в диалоге №1") return menu_1_2: ; это Вторая строка в 2 диалоге addChatMessage("Вы выбрали вторую строку в диалоге №1") return
menu_2_1: ; это Первая строка в 2 диалоге addChatMessage("Вы выбрали первую строку в диалоге №2") return menu_2_2: ; это Вторая строка в 2 диалоге addChatMessage("Вы выбрали вторую строку в диалоге №2") return
инклуд заменил на ваш с сайта
Сообщение отредактировал Martin_Self - Пятница, 01.09.2017, 11:13