Что нового

Быстрое кликанье левой кнопкой мыши.

shift72

Новичок
Сообщения
86
Репутация
2
Здравствуйте. Решил накидать скриптик для быстрой стрельбы из пистолета. Вот что получилось:
Код:
While 1
    If _IsPressed(71) Then ;~ Запуск по нажатию F2
          MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		   MouseClick("left")
		 Sleep ("1")
		 
		    EndIf


Проблема в том что выстрелы захлебываются. Т.е. производится 2-3 выстрела и затем пол секунды или секунда времени выстрелов нет. Да и вообще физически кликая можно добиться выстрелов быстрее. В чем проблема? Побывал без команды
Код:
Sleep ("1")
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Opt('MouseClickDelay',0)
Opt('MouseClickDownDelay',0)
Global $isClick = False
HotKeySet('{F2}','_click')
While 1
	If $isClick Then
		MouseClick('left')
	Else
		Sleep(100)
	EndIf
WEnd
Func _click()
	$isClick = Not $isClick
EndFunc


Вот вам и скорость. Проверь так, в калькуляторе, 1 + 1
наводи мышь на равно, и нажми F2, считать не перестанет еще минуту))
 

blacklis

Новичок
Сообщения
64
Репутация
1
Поставь задержку 100-200
1000 - это секунда, 100 - 0.1 с, а 1... это вообще сложно задержкой назвать, у тебя лкм передаётся быстрее, чем .. Вобщем очень быстро)
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
blacklis
inververs это уже описал в своем примере
 

AZJIO

Меценат
Меценат
Сообщения
2,762
Репутация
1,152
Код:
Sleep ("1") ; Не правильно
Sleep (1) ; правильно
Sleep (1) ; реально всё равно будет Sleep (10)

Получается 100 кликов в секунду, потому что минимальная задержка не 1, а 10.
А как же цикл? Реальный вариант
Код:
While 1
	If _IsPressed(71) Then ;~ Запуск по нажатию F2
		For $i = 1 To 10
			MouseClick("left")
			; Sleep(10)
			Sleep(100) ; позволить игре обработать клики, 10 раз в секунду
		Next
	EndIf
WEnd
 
Автор
S

shift72

Новичок
Сообщения
86
Репутация
2
хмм... все способы представленные выше перепробывал. Игра напрочь отказывается принимать скрипт. 2-3 выстрела и пауза. Затем 1-2 выстрела и снова пауза. Ну да ладно. Спасибо ребята, приведенные примеры пригодятся.
 

cnm

Новичок
Сообщения
58
Репутация
2
попробуй так

Код:
While 1
    If _IsPressed(71) Then ;~ Запуск по нажатию F2
          MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
         MouseClick("left")
         Sleep (200)
         
            EndIf


Если получится, то надо будет уменьшить значение sleep
 

AZJIO

Меценат
Меценат
Сообщения
2,762
Репутация
1,152
shift72 [?]
2-3 выстрела и пауза
Во многих играх был такой момент, если делать удары с определённой частотой, например 3 удара в сек то они проходят, если делать 4 удара в секунду то первый проходит, второй выпадает на момент когда завершается первый, потом мог бы пройти следующий но мы выжидаем паузу для третьего в итоге число ударов в худшем случае в 2 раза меньше чем можно нанести. Просто вычисли частоту с которой возможно выполнить максимальное количество выстрелов, методом проб. Не исключено что в игре это может быть ограничено специально, также как специально стали делать защиту в памяти от поиска адресов жизни, патронов и т.д.

Даже кнопка при её перерисовке ограничивает количество кликов на ней.
 
Автор
S

shift72

Новичок
Сообщения
86
Репутация
2
Спасибо за совет. Я думал об этом. Даже если ставить высокую задержку, все равно не проходит команда... Даже если в секунду ставить задержку. Игра называется. Infestation (бывшая War Z)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
попробуй так
Код:
While 1
    If _IsPressed(71) Then ;~ Запуск по нажатию F2
          MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
           MouseClick("left")
         Sleep (200)
         MouseClick("left")
         Sleep (200)
         
            EndIf
ну зачем писать несколько раз одно и тоже если цикл есть? не понимаю...
Код:
While 1
    If _IsPressed(71) Then ;~ Запуск по нажатию F2
For $c = 1 To 10 ; будет 10 кликов
              MouseClick("left")
             Sleep (200)
         Next
            EndIf

так хотябы... ((((((((((((
 

cnm

Новичок
Сообщения
58
Репутация
2
Потому что лень переписать код.
 

Юрий

Новичок
Сообщения
82
Репутация
3
Код:
#Region >>>Инструкция!!!<<<
#Comments-Start

			КЛИКАЛКА

	Программа предназначена для кликанья по координатам мышки с определённой
частотой (по умолч. 10 раз/мин.) и с определённым количеством кликов за 1 раз
(по умолч. 1 клик/раз).

	Как запустить процесс кликанья:
По умолчанию, я установил себе одну из дополнительных клавиш мыши, но такие кнопки есть
не у всех. Кнопку можна поменять в первых параметрах ф-ции "_IsPressed" (маркеры №1 и №2).

	Как изменить частоту:
Жмём на тильду, оня же "ё", отпускаем её, потом через определённый промежуток времени
жмём ещё раз - в ответ слышым бип, длительностью в выделенный нами промежуток времени
между кликами тильды. Стоит делитель этого самого времени в 50 раз (маркер №3), то есть
если вы тыкали с промежутком в 1 сек., то программа приймёт 20 милисекунд. Меняйте
делитель на своё усмотрение.

	Как изменить колличество кликов за раз:
Жмём тильду, отпускаем, не чего не ожидая, и не спеша просто тыкаем на CTRL или SHIFT -
мы вошли в режим изсменения. Теперь просто тыкаем CTRL или SHIFT для изменения колличества
кликов на единицу вниз(CTRL) или вверх(SHIFT). По окончанию изменения колличества кликов
тыкаем тильду - мы вышли обратно в рабочий режим.

	КАК ВЫКЛЮЧИТЬ ПРОГРАММУ:
Жмём тильду, и держим до звука "бип". Готово.

Автор: Власов Юрий.
#Comments-End
#EndRegion


#Region >>> Библиотеки и Опции <<<
#NoTrayIcon
#include <Misc.au3>
Opt("MouseClickDelay",0)
Opt("MouseClickDownDelay",0)
#EndRegion


#Region >>> Переменные <<<
Local $SleepTime = 100 , $hDLL = DllOpen("user32.dll") , $Clicks = 1
#EndRegion


#Region >>> Функции <<<
_Main()

Func _Main()
	While 1
		Select
			Case _IsPressed("05" , $hDLL)					;~~~~~~~~МАРКЕР №1~~~~~~~~
				Local $CountClicks = 0
				While _IsPressed("05" , $hDLL)					;~~~~~~~~МАРКЕР №2~~~~~~~~
					Local $MousePosition = MouseGetPos()
					MouseClick("left" , $MousePosition[0] , $MousePosition[1] , $Clicks , 0)
					$CountClicks += $Clicks
					Sleep($SleepTime)
				WEnd
				ConsoleWrite(@CRLF & "Clicked >>> " & $CountClicks & " <<< times!")
			Case _IsPressed("C0" , $hDLL)
				Beep(600,50)
				Local $Timer = TimerInit()
				Do
					Sleep(1)
				Until TimerDiff($Timer) > 100 Or Not _IsPressed("C0" , $hDLL)
				If Not _IsPressed("C0" , $hDLL) Then
					Do
						Sleep(1)
					Until _IsPressed("C0" , $hDLL) Or _IsPressed("10" , $hDLL) Or _IsPressed("11" , $hDLL)
					If _IsPressed("C0" , $hDLL) Then
						$SleepTime = Int(TimerDiff($Timer)) / 50					;~~~~~~~~МАРКЕР №3~~~~~~~~
						While _IsPressed("C0" , $hDLL)
							Sleep(1)
						WEnd
						Beep(1000 , $SleepTime)
						ConsoleWrite(@CRLF & "$SleepTime >>> " & $SleepTime)
					Else
						Beep(800,50)
						ConsoleWrite(@CRLF & "$Clicks >>> " & $Clicks)
						While _IsPressed("11" , $hDLL) Or _IsPressed("10" , $hDLL)
							Sleep(1)
						WEnd
						Do
							If _IsPressed("10" , $hDLL) Then
								Local $Timer = TimerInit()
								$Clicks += 1
								ConsoleWrite(@CRLF & "$Clicks >>> " & $Clicks)
								While _IsPressed("10" , $hDLL)
									Sleep(1)
								WEnd
							ElseIf _IsPressed("11" , $hDLL) Then
								Local $Timer = TimerInit()
								$Clicks -= 1
								ConsoleWrite(@CRLF & "$Clicks >>> " & $Clicks)
								While _IsPressed("11" , $hDLL)
									Sleep(1)
								WEnd
							EndIf
						Until _IsPressed("C0" , $hDLL)
						While _IsPressed("C0" , $hDLL)
							Sleep(1)
						WEnd
						Beep(1000 , 50)
					EndIf
				Else
					Beep(1000,100)
					Sleep(10)
					Beep(900,100)
					Exit
				EndIf
		EndSelect
		Sleep(50)
	WEnd
EndFunc

#EndRegion
 
Верх