Тема: «AHK: Создание скрипта для игры на антиотдачу орудия».
Здравствуйте!
С помощью человека с Рубоард был написан следующий макрос, который мной был немного доретуширован под мои нужды:
toggleHotkeys := true
fireCorrectionMode := [[[0, 100, 100, 10000], [0, 100, 100, 10000]], [[0, 0, 0, 0], [0, 0, 0, 0]]]
F12::ExitApp
F4::toggleHotkeys := !toggleHotkeys
#if toggleHotkeys
~Xbutton1::gunType := 1
~sc002::gunType := 1
~Xbutton2::gunType := 2
~sc003::gunType := 2
~sc004::gunType := 0
~sc005::gunType := 0
~sc006::gunType := 0
~*WheelUp::gunType := 0
~*WheelDown::gunType := 0
!Wheelup::gunType := 0
#if gunType && toggleHotkeys
~*LButton::
Autofire()
return
#if
Autofire()
{
global gunType, fireCorrectionMode
while GetKeyState("LButton", "P")
{
mode := fireCorrectionMode[gunType, GetKeyState("LControl", "P")? 1 : 2]
Click down
Sleep mode[3]
DllCall("mouse_event",uint,1,int,mode[1],int,mode[2],uint,0,int,0)
Click up
Sleep mode[4]
}
}
Смысл следующий: На боковые кнопки мышки и на кнопки 1 и 2 установлено 2 типа орудия.
Каждое из орудий имеет свою отдачу. Причем отдача отличается из того, в каком положении я стреляю (сидя - нажат Контрол) или стоя (ничего дополительно не нажимается).
Выполнен скрипт так: при нажатии кнопки клавы или мыши задается номер орудия (0 - ничего не задано, 1 - 1 орудие, 2 - 2 орудие). При нажатии Контрола выбирается подтип антиотдачи для соответствующего орудия.
При нажатии ЛКМ происходят выстрелы сколько-то сек, которые я задаю, потом отпускание кнопки мыши и пауза.
При этом в скрипте учитываются ситуации, что я могу сменить тип орудия и должна сменится антиотдача, могу встать и также должна антиотдача сменится.
В итоге в этом скрипте возникли 2 проблемы:
1) Отключение Антиодачи - нажатие кнопки F4 ни как не влияет на работу антиотдачи, она работает всегда.
2) После первого нажалтия ЛКМ и удержания ее, работает все как часы. Но если я отпускаю ЛКМ и потом вновь нажимаю, то выстрелы длятся больше положенного по мс. Например, тут задано 100мс на 1 орудие (его пока и тестю, настраиваю), а по факту выстрелы длятся сек 4-5, потом лишь происходит смещение на 100 вниз.
Понять с чем это связано не могу.
PS Есть предположение, что это связано с паузой после отпускания мышки в скрипте. Если выставляю не 5000, а 1000 - все работает как часы. Не понимаю этой зависимости.
Вопроса 2: Может как-то ввести повторную проверку по нажатию кнопки, чтобы не ждать 5 секунд при повтороном нажатии ЛКМ, пока скрипт сообразит, что ЛКМ зажата.
И 2 вопрос, почему же, когда F4 я нажимаю, реакции нет никакой на скрипт. Он также при повторном нажатии стреляет и через сек 5 делает смещение.
Есть ли в программе возможность отслеживания шаг за шагом, что происходит в скрипте, чтобы понять, где происходит сбой работы его?
Спасибо за внимание.
PPS Вопрос снимаю, т.к. экспериментальным путем выяснил, что время в команде Sleep влияет на работу скрипта целиком, и чем она меньше, тем меньше задержка между между выполнением скрипта ,и уже не эти 5 сек, а при установке паузы в 3 сек будет лишь 3 сек и т.д.