1 (изменено: Михаил, 2012-08-12 16:32:19)

Тема: AHK: Пишем макросы для игр

Доброго всем времени суток, уважаемые!!!  Пишу вот по какому поводу..... Имею некоторые сложности со здоровьем(проблема с суставами), что мешает мне полноценно играть в игру Русская Рыбалка 3.6. А именно при вытягивании рыбы нужно постоянно нажимать клавиши (G) и (H), что для меня проблематично. Прочитал в интернете что AutoHotkey можно написать макрос для этой операции, то есть чередования клавиш G-H в нескольких режимах(верней с разной интенсивностью.   Пример нажатием на клавишу 1 идет чередование клавиш G-H c маленькой скоростью нажатия, клавиша2 более высокая скорость нажатия клавиш и т.д. наверное 4 режима разной интенсивности оптимально будут для вылова разного веса рыбы, без потери снастей.
  Буду искренне признателен вам! Помогите как нибудь...?    Заранее благодарен! С уважением Михаил.   vmiha@inbox.ru

2

Re: AHK: Пишем макросы для игр

Iteration:=50 ; задержка между нажатиями
PressD:=15 ; величина удержания нажатия
Value:=10 ; значение переменной которой будем...
; ...воздействовать на другие переменные в коде

; отладка:
; изменяем задержку между нажатиями
=::ChangeVars("Itr", Iteration+=Value) ; plus
>^=::ChangeVars("Itr", Iteration-=Value) ; rctrl+plus
; изменяем величину удержания нажатия
-::ChangeVars("Press", PressD+=Value) ; minus
>^-::ChangeVars("Press", PressD-=Value) ; rctrl+minus
; изменяем "величину шага"
F12:: ; одно нажатие - 1, два бысрых - 10, и т.д., до 4х
   KeyWait, % A_ThisHotkey
   If A_TimeSinceThisHotkey>350
      Exit
   Itr++
   SetTimer, Counter, -350
   Return
Counter:
   ChangeVars("Value", Value:=Itr=1
                     ?     1: Itr=2
                     ?    10: Itr=3
                     ?   100:500)
   Itr:=""
   Return

; предустановки:
1::Iteration:=50, PressD:=15
2::Iteration:=100, PressD:=30
3::Iteration:=125, PressD:=50
4::Iteration:=150, PressD:=75
5::Iteration:=300, PressD:=100
; и т.д.

; горячая клавиша действия:
Space:: ; принцип работы - переключатель
   SetTimer, Action, % (IsState:=!IsState) ? -0:"Off"
   KeyWait, % A_ThisHotkey
   Return

; собственно само действие:
Action:
   Send, % IsState ? "{vk41 Down}":"" ; g
   Sleep, IsState ? PressD:-1
   Send, {vk41 Up}
   Sleep, IsState ? Iteration:-1
   Send, % IsState ? "{vk44 Down}":"" ; h
   Sleep, IsState ? PressD:-1
   Send, {vk44 Up}
   Sleep, IsState ? Iteration:-1
   SetTimer, % IsState ? "Action":"EndAction", -0
EndAction:
   Return

; функция для вывода информации (отладка):
ChangeVars(Arg*)
{
   ; если не полноэкранное приложение, то вполне подходит трэйтип:
   TrayTip, % Arg.1, % Arg.2 ; если наоборот,...
   ; ...то нужно заменить вывод информации на "сырой ввод" в поле чата
   ;SendInput, {vk59} ; допустим Y - клавиша чата
   ;Sleep, 250
   ;SendInput, % "{Raw}"Arg[1]" "Arg[2]
   ;Sleep, 750
   ;SendInput, {Esc}
}