pachela Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 Собственно есть функция прекрасно работающая. Единственно "НО" - функция включается по нажатию хоткея и выключается по нажатию другого хоткея. А хотелось бы сделать, что бы функция выполнялась пока Хоткей удерживается. Вот эта часть кода Скрытый текст function CEButton11Click(sender) autoAssemble([[ address5: db 90 90 90 90 90 90 90 90 address6: db 90 90 90 90 90 90 90 90 address7: db 00 A0 8C 45 00 A0 8C 45 00 00 80 3F ]]) control_setEnabled(CETrainer.CEButton11,false) control_setEnabled(CETrainer.CEButton12,true) end function CEButton12Click(sender) autoAssemble([[ address5: db F3 0F 11 83 98 01 00 00 address6: db F3 0F 11 B1 9C 01 00 00 ]]) control_setEnabled(CETrainer.CEButton12,false) control_setEnabled(CETrainer.CEButton11,true) end createHotkey(CEButton11Click,VK_XBUTTON1) createHotkey(CEButton12Click,VK_XBUTTON2) Нажал 4 кнопку мышки - Инструкции занопились, 5 - вернули к оригиналу. На это не удобно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 Создай таймер, который будет выполнять функцию, где будет проверка - нажата кнопка или нет. В этом тебе поможет функция isKeyPressed(key). А дальше по условиям, если нажата - запись того, нет - другого. Ссылка на комментарий Поделиться на другие сайты Поделиться
pachela Опубликовано 18 февраля, 2017 Автор Поделиться Опубликовано 18 февраля, 2017 2 часа назад, Vlad2 сказал: Создай таймер, который будет выполнять функцию, где будет проверка - нажата кнопка или нет. В этом тебе поможет функция isKeyPressed(key). А дальше по условиям, если нажата - запись того, нет - другого. Попытался сделать. Но что то не пашет. В чем косяк? Скрытый текст function checkKeys(timer) if (isKeyPressed(VK_SHIFT)) then writeBytes(address3,0x60,0xE3,0x16,0x00,0x00,0x5A,0x62,0x02) --Адрес у нас найден ранее else writeBytes(address3,0x60,0xE3,0x16,0x00,0x40,0x4B,0x4C,0x00) end end t=createTimer(nil) timer_setInterval(t, 50) timer_onTimer(t, checkKeys) timer_setEnabled(t, true) И еще, а как сделать смещение? В АА я делаю так Скрытый текст autoAssemble([[ address3+4: ---Тут адресс + смещение 4 байта db 40 4B 4C 00 ]]) А вот как делать в Lua, я так и не разобрался. Или нужно изгаляться? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 23 минуты назад, pachela сказал: Попытался сделать. Но что то не пашет. В чем косяк? Кинь, мне в ЛС свою текущую таблицу - попробую помочь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 февраля, 2017 Поделиться Опубликовано 18 февраля, 2017 Lua-скрипт: Скрытый текст [ENABLE] {$LUA} form_show(UDF1) function checkKeys(timer) if (isKeyPressed(VK_SHIFT)) then autoAssemble([[ Tutorial-i386.exe+23ACD: nop nop ]]) control_setCaption(UDF1.CELabel1,"Шаг 2 решён") else autoAssemble([[ Tutorial-i386.exe+23ACD: jne Tutorial-i386.exe+23AFB ]]) control_setCaption(UDF1.CELabel1,"Для решения шага нажмите SHIFT") end end t=createTimer(nil) timer_setInterval(t, 50) timer_onTimer(t, checkKeys) timer_setEnabled(t, true) {$ASM} [DISABLE] {$LUA} timer_setEnabled(t, false) {$ASM} Видео: 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
pachela Опубликовано 19 февраля, 2017 Автор Поделиться Опубликовано 19 февраля, 2017 19 час назад, Garik66 сказал: Lua-скрипт: Скрыть содержимое [ENABLE] {$LUA} form_show(UDF1) function checkKeys(timer) if (isKeyPressed(VK_SHIFT)) then autoAssemble([[ Tutorial-i386.exe+23ACD: nop nop ]]) control_setCaption(UDF1.CELabel1,"Шаг 2 решён") else autoAssemble([[ Tutorial-i386.exe+23ACD: jne Tutorial-i386.exe+23AFB ]]) control_setCaption(UDF1.CELabel1,"Для решения шага нажмите SHIFT") end end t=createTimer(nil) timer_setInterval(t, 50) timer_onTimer(t, checkKeys) timer_setEnabled(t, true) {$ASM} [DISABLE] {$LUA} timer_setEnabled(t, false) {$ASM} Реализовал в трейнере так: Скрытый текст function checkKeys(timer) if (isKeyPressed(VK_R)) then autoAssemble([[ address3+4: 00 5A 62 02 ]]) else autoAssemble([[ address3+4: db 40 4B 4C 00 ]]) end end t=createTimer(nil) timer_setInterval(t, 100) timer_onTimer(t, checkKeys) timer_setEnabled(t, true) И вот возникает логический вопрос: Как сделать так, что бы при запуске трейнера сразу не запускался таймер, а только после определенных манипуляций? Ну к примеру по нажатию кнопки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 февраля, 2017 Поделиться Опубликовано 19 февраля, 2017 39 минуты назад, pachela сказал: Ну к примеру по нажатию кнопки. Ну так кинь кнопку на форму. Вот скрипт с кнопкой для моей таблички по которой снимал видео (приспособь под свою табличку и форму): Скрытый текст form_show(UDF1) function checkKeys(timer) if (isKeyPressed(VK_SHIFT)) then autoAssemble([[ Tutorial-i386.exe+23ACD: nop nop ]]) control_setCaption(UDF1.CELabel1,"Шаг 2 решён") else autoAssemble([[ Tutorial-i386.exe+23ACD: jne Tutorial-i386.exe+23AFB ]]) control_setCaption(UDF1.CELabel1,"Для решения шага нажмите SHIFT") end end t=createTimer(nil) timer_setInterval(t, 50) timer_onTimer(t, checkKeys) timer_setEnabled(t, false) // здесь отключи таймер function CEButton1Click(sender) if UDF1.CEButton1.Caption == "Включить" then UDF1.CEButton1.Caption = "Выключить" timer_setEnabled(t, true) // здесь включи else if UDF1.CEButton1.Caption == "Выключить" then UDF1.CEButton1.Caption = "Включить" timer_setEnabled(t, false) // и опять выключи end end end Ссылка на комментарий Поделиться на другие сайты Поделиться
pachela Опубликовано 19 февраля, 2017 Автор Поделиться Опубликовано 19 февраля, 2017 12 минуты назад, Garik66 сказал: Ну так кинь кнопку на форму. Вот скрипт с кнопкой для моей таблички по которой снимал видео (приспособь под свою табличку и форму): Скрыть содержимое form_show(UDF1) function checkKeys(timer) if (isKeyPressed(VK_SHIFT)) then autoAssemble([[ Tutorial-i386.exe+23ACD: nop nop ]]) control_setCaption(UDF1.CELabel1,"Шаг 2 решён") else autoAssemble([[ Tutorial-i386.exe+23ACD: jne Tutorial-i386.exe+23AFB ]]) control_setCaption(UDF1.CELabel1,"Для решения шага нажмите SHIFT") end end t=createTimer(nil) timer_setInterval(t, 50) timer_onTimer(t, checkKeys) timer_setEnabled(t, false) // здесь отключи таймер function CEButton1Click(sender) if UDF1.CEButton1.Caption == "Включить" then UDF1.CEButton1.Caption = "Выключить" timer_setEnabled(t, true) // здесь включи else if UDF1.CEButton1.Caption == "Выключить" then UDF1.CEButton1.Caption = "Включить" timer_setEnabled(t, false) // и опять выключи end end end Спасибо. Это все работает. Я впринципи правильно делал, просто, как оказалось, для сброса таймера, нужно перезапустить СЕ. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 февраля, 2017 Поделиться Опубликовано 19 февраля, 2017 1 минуту назад, pachela сказал: Спасибо. Это все работает. Не за что. Очень люблю - когда работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 февраля, 2017 Поделиться Опубликовано 19 февраля, 2017 6 минут назад, pachela сказал: для сброса таймера, нужно перезапустить СЕ. Это правильно, ты же таймер не отключал и он уже работает вечно, поэтому в своём видео я и отметил момент - почему я предпочитаю при работе с таймером, пока не отлажу LUA-скрипт, работать именно в АА-скрипте и отключать таймер, если вдруг что, в секции [DISABLE] : [DISABLE] {$LUA} timer_setEnabled(t, false) {$ASM} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения