1 (изменено: BombeR, 2018-07-16 05:37:23)

Тема: Универсальный авто-кликер с переменными

Собственно для своего удобства решил сделать Автокликер для онлайн игры "Ragnarok Online'

Зачем?
- Хочу сделать полноценного и удобный кликер. (в интернете нет)

В чем проблема написания?
- Переменные указываются в gui (для удобства)
- Далее эти переменные надо вставить в код в 3х местах.
- Проблема в том, что сам ахк не определяет переменную как обозначение кнопки. Тупо не врубается что ему с этими данными делать. (Ниже показал)
- По логике нужно присвоить переменной статус кнопки. После чего ахк должен понимать что сочетание букв из переменной это кнопка.

P.S. Все переменные передаются корректно, проверял.



loop
{
Gui, Add, Text,, Задержка:
Gui, Add, DropDownList, vdel, 10|20|30|40|50|60|70|80|90|100
Gui, Add, Text,, Кнопка спама:
Gui, Add, hotkey, vbut, h20 w20
Gui, Add, Button, default, OK
Gui, Show, Restore w300 h300
return

ButtonOK:
Gui, Submit, NoHide
break
}

$%but%::      ;;Вот тут нужно указывать кнопку, но ахк ругается и не понимает что ему переменная передает. 
Loop
{
if not GetKeyState("%but%", "P")  ;; тут скорее всего тоже неверно написано (возможно надо убрать %%)
break
send {%but%}
click
sleep %delay%
}
return

end::pause
Post's attachments

Screenshot_2.png
Screenshot_2.png 2.83 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2 (изменено: qqlexa, 2018-07-17 02:18:29)

Re: Универсальный авто-кликер с переменными

Скрипт с использованием Hotkey:


loop
{
Gui, Add, Text,, Задержка:
Gui, Add, DropDownList, vdel, 10|20|30|40|50|60|70|80|90|100
Gui, Add, Text,, Кнопка спама:
Gui, Add, hotkey, vbut, h20 w20
Gui, Add, Button, default, OK
Gui, Show, Restore w300 h300
return

ButtonOK:
Gui, Submit, NoHide
Hotkey, $%but%,  Hotkey ;  Для кнопки %but%  использовать переход на метку Hotkey
break
}
 
return
Hotkey: 
Loop
{
if not GetKeyState(but, "P") 
   break
send {%but%}
click
sleep %delay%
}
return

end::pause

3

Re: Универсальный авто-кликер с переменными

stealzy, Отредактировал своё сообщение. Не запомнил этого, и вообще не понимаю сейчас почему я так подумал..

Gui, Submit, NoHide

4 (изменено: BombeR, 2018-07-17 09:02:12)

Re: Универсальный авто-кликер с переменными

Спасибо все работает! qqlexa
Поставил плюсики вам.

Кстати спасибо за ссылку stealzy. Интересная статья с подробным разбором больной мне темы.

Единственное когда в gui ставишь другую кнопку, предыдущая перестает работать.
Видимо из-за того что ей был присвоен статус hotkey. каким способом его обнулить можно, после смены кнопки в gui?

Кстати еще улучшил кликер.
Через команду (postmessage) , кликает примерно в 5-10 раз быстрее, но нужно определять само окно через Winexist.
Я сделал это на отдельную кнопку, что бы фиксировать PID определенного окна, если вдруг у нас несколько окон.


home::
loop
{
WinGet, active_pid, PID, A
break
}
return

$F1::        
Loop
{
if not GetKeyState("F1", "P") 
break
PostMessage, 0x100, 0x70, 0, , ahk_pid %active_pid% ; 0x100 обозначение команды WM_KEYDOWN, 0x70 = F1 (VK)
PostMessage, 0x101, 0x70, 0, , ahk_pid %active_pid% ; 0x101 обозначение команды WM_KEYUP
PostMessage, 0x201, 1, ((y<<16)^x), , ahk_pid %active_pid%  ; 0x201 WM_LBUTTONDOWN
PostMessage, 0x202 , 0, ((y<<16)^x), , ahk_pid %active_pid% ; 0x202 WM_LBUTTONUP
sleep, 1 ; обязательно ставить задержку хотя бы 1 м.с. т.к. без задержки окно просто зависает.
#maxhotkeysperinterval 99999
}

end::suspend

5 (изменено: qqlexa, 2018-07-17 16:35:41)

Re: Универсальный авто-кликер с переменными

BombeR, а зачем использовать цикл и выходить из него, если можно получить PID и всё?


home::WinGet, active_pid, PID, A

6 (изменено: BombeR, 2018-07-18 07:09:55)

Re: Универсальный авто-кликер с переменными

qqlexa пишет:

BombeR, а зачем использовать цикл и выходить из него, если можно получить PID и всё?


home::WinGet, active_pid, PID, A

Согласен, накосячил чуток,  не все тонкости еще изучил.
вообще можно оставить мой вариант и добавить строчку


Hotkey, home, , off

Тогда нельзя будет случайно другое окно подцепить

stealzy пишет:
BombeR пишет:

sleep, 1

= Sleep 10 или 14, читайте справку. Окно может зависнуть и при такой задержке если не будет успевать обрабатывать 700 кликов в секунду.
Если ваш кликер состязается с кликерами других игроков и ваш пинг порядка 30мс или меньше, 12 мс могут иметь значение.
Если кликается кнопка, которая меняет цвет, можно считывать изменение цвета пикселя и кликать по этому событию, задержка будет порядка 2мс, но PixelGetColor тут не подойдет ввиду своей медлительности (если у вас винда старше ХР).

Ну вообще это писькомерство уже) в игре обычно стоят задержки на спам умений. порядка 200мс. по этому даже обычного кликера без postmassage вполне хватит с задержкой 50мс.

Это больше для себя сделал, т.к. раньше при сравнении стандартного кликера на ахк и спама с помощью мышки через макрос разница была большая. Теперь примерно одинаково.

Самый большой вопрос остается до сих пор - как отправлять клики в неактивное окно Ragnarok Online. Даже при помощи postmassage не получается, о банальных controlsend и т.п. вообще молчу..

Как я выяснил там клики мыши и вообще обработка приложением мышки проходит через отдельную длл (dinput.dll). Она была специально сделана именно для игры (не путать с обычной dinput)

Если есть мысли как справиться с этим то было бы круто выслушать. вообще слышал, что можно это сделать через ps\2 драйвер мыши. т.е. мы через драйвер общаемся с компьютером и любая программа определяет наши клики как реально нажатые нами мышкой. Но в таком случае будет задействован реальный курсор мышки, вряд ли получится кликнуть в неактивное окно

7 (изменено: BombeR, 2018-07-18 05:39:26)

Re: Универсальный авто-кликер с переменными

Окончательный код кликера, добавил обнуление хоткея, перед применением нового.
Так же добавил активацию хоткея, если кто то захочет предыдущий хоткей еще раз поставить


loop
{
Gui, Add, Text,, Задержка:
Gui, Add, DropDownList, vdel, 10|20|30|40|50|60|70|80|90|100
Gui, Add, Text,, Кнопка спама:
Gui, Add, hotkey, vbut, h20 w20
Gui, Add, Button, default, OK
Gui, Show, Restore w300 h300
return

ButtonOK:
Hotkey, $%but%, Hotkey, off
Gui, Submit, NoHide
Hotkey, $%but%,  Hotkey, on
break
}
return

Hotkey: 
Loop
{
if not GetKeyState(but, "P") 
break
send {%but%}
click
sleep %del%
}
return

end::suspend