Грамотные игроки не зажимают гашетку стрельбы из пулемета, а "спамят" кнопку стрельбы, таким образом разброс не растет, нагрев оружия чуть медленнее, но падает скорострельность, тут имеет значение как часто ты можешь кликать кнопку огня.
Так вот, повстречав несколько раз явно программно-управляемые спайки практически левиофаноподобных автомобилей в свободном мире, я засомневался, а есть ли вообще античит у этой игры.
После одного из боев я остужал палец в стакане с напитком, решил попробовать сделать лентяйку, мысль проста, я не хочу клацать, хочу зажать кнопочку, а софт пусть клацает за меня.
сходил на форум AutoIT, и после 5 минут поиска нашел подходящую заготовку... Да, я даже не писал ничего(хотя в основном стараюсь), я взял просто готовое решение из "стола заказов", там если подробно описать необходимый функционал, то вполне реально получить что-то подходящее.
после первого запуска скрипта мне понадобилось 5 минут на подбор настроек, а именно "задержка в миллисекундах между нажатием и отпусканием кнопки мыши" и "задержка в миллисекундах между одиночными кликами"
для меня идеальными на белых-синих пулеметах показались 45-50*100-110
Собственно код на AutoIT.
#include <Misc.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
HotKeySet("{PAUSE}", "Start")
HotKeySet("+{ESC}", "Quit")
$GUI = GUICreate("klicker", 455, 105)
$InpDownUp = GUICtrlCreateInput("", 5, 5, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", "5"))))
GUICtrlCreateLabel("задержка в миллисекундах между нажатием и отпусканием кнопки мыши", 60, 5, 380, 20, 0x0200)
$InpClicks = GUICtrlCreateInput("", 5, 30, 50, 20, 0x2000)
GUICtrlSetData(-1, Abs(Int(IniRead(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", "30"))))
GUICtrlCreateLabel("задержка в миллисекундах между одиночными кликами", 60, 30, 380, 20, 0x0200)
GUICtrlCreateLabel("Pause - установка/снятие кликера с паузы", 5, 55, 230, 20, 0x0200)
GUICtrlCreateLabel("Shift+ESC - прекращение работы скрипта", 5, 80, 230, 20, 0x0200)
$BtnStart = GUICtrlCreateButton("Готово", 350, 55, 100, 45)
GUISetState()
Do
Switch GUIGetMsg()
Case -3
Exit
Case $BtnStart
IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "DownUpDelay", GUICtrlRead($InpDownUp))
IniWrite(@ScriptDir & "\DelaySets.ini", "Delay", "ClicksDelay", GUICtrlRead($InpClicks))
ExitLoop
EndSwitch
Until 0
Global $DownUpDelay = GUICtrlRead($InpDownUp)
Global $ClicksDelay = GUICtrlRead($InpClicks)
Global $Start = True
GUIDelete($GUI)
Do
If $Start Then
If _IsPressed("02") Then
Do
$tPoint = _WinAPI_GetMousePos()
$hWin = _WinAPI_WindowFromPoint($tPoint)
_WinAPI_ScreenToClient($hWin, $tPoint)
LeftDownUp($hWin, $tPoint.X, $tPoint.Y, $DownUpDelay)
Sleep($ClicksDelay)
Until Not _IsPressed("01")
EndIf
EndIf
Sleep(10)
Until 0
Func LeftDownUp($hWnd, $X, $Y, $Sleep = 0)
_WinAPI_PostMessage($hWnd, $WM_LBUTTONDOWN, 0, _WinAPI_MakeLong($X, $Y))
_WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_LBUTTONDOWN))
If $Sleep Then Sleep($Sleep)
_WinAPI_PostMessage($hWnd, $WM_LBUTTONUP, 0, _WinAPI_MakeLong($X, $Y))
_WinAPI_PostMessage($hWnd, $WM_SETCURSOR, $hWnd, _WinAPI_MakeLong($HTCLIENT, $WM_LBUTTONUP))
EndFunc
Func Start()
$Start = Not $Start
EndFunc
Func Quit()
Exit
EndFunc
Как вы догадались, всё работает, буквально пишу из гаража где автосборкой собрал какое-то корытце с пулеметами и пострелял по мишеням близ гаража.
Я не преследовал цель нафармить ресурсов или упростить игру, я хотел чтобы ничего не вышло.