Что нового

Как сократить код?

amhad321

Новичок
Сообщения
6
Репутация
0
Помогите сократить код и уменьшить лаги
Код:
HotKeySet("{F6}","_Exit")
WinWaitActive("Counter-Strike")
While 1
$Variable = PixelSearch(680,395,685,399,0xFF0000)
If IsArray($Variable) = True Then
MouseClick("LEFT")
EndIf
WEnd
While 1
$Variable2 = PixelSearch(680,395,685,399,0xFF0101)
If IsArray($Variable2) = True Then
MouseClick("LEFT")
EndIf
WEnd
While 1
$Variable3 = PixelSearch(680,395,685,399,0xBA0000)
If IsArray($Variable3) = True Then
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFunc

если это возможно
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
amhad321, в вашем коде работает только первый цикл так что два следующих просто не нужны. И код принято заключать в тег AutoIt
autoit.gif


Так же вместо проверки является ли переменная массивом можно проверять макрос @error как это показано в примере к PixelSearch
Код:
HotKeySet("{F6}", "_Exit")
WinWaitActive("Counter-Strike")

While 1
	PixelSearch(680, 395, 685, 399, 0xFF0000)
	If Not @error Then MouseClick("LEFT")
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
A

amhad321

Новичок
Сообщения
6
Репутация
0
Мне нужно чтобы эти две следующие тоже работали как такое сделать?И как убрать лаги?


Добавлено:
Сообщение автоматически объединено:

amhad321 сказал(а):
Мне нужно чтобы эти две следующие тоже работали как такое сделать?И как убрать лаги?
Так как в приложении цвета меняются или как в одной строке сделать несколько цветов?И у меня курсор показывается а мне он не нужен
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
HotKeySet("{F6}","_Exit")
WinWaitActive("Counter-Strike")
While 1
$Variable = PixelSearch(680,395,685,399,0xFF0000)
If IsArray($Variable) Then
MouseClick("LEFT")
EndIf

$Variable2 = PixelSearch(680,395,685,399,0xFF0101)
If IsArray($Variable2) Then
MouseClick("LEFT")
EndIf

$Variable3 = PixelSearch(680,395,685,399,0xBA0000)
If IsArray($Variable3) Then
MouseClick("LEFT")
EndIf
Sleep(200)
WEnd

Func _Exit()
Exit
EndFunc
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Можете попробовать подобрать параметр "shade-variation" так как у вас все цвета это градации красного. И если под лагами вы подразумеваете нагрузку на процессор тогда добавьте минимальную задержку Sleep(10) между повторами цикла

Код:
HotKeySet("{F6}", "_Exit")
WinWaitActive("Counter-Strike")

While Sleep(10)
	PixelSearch(680, 395, 685, 399, 0xFF0000, 70)
	If Not @error Then MouseClick("LEFT", Default, Default, 1, 0)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Код:
HotKeySet('{F6}', '_Exit')
WinWaitActive('Counter-Strike')

SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')

While Sleep(100)
WEnd

Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func _Exit()
	Exit
EndFunc
 
Автор
A

amhad321

Новичок
Сообщения
6
Репутация
0
hedji сказал(а):
Код:
HotKeySet("{F6}","_Exit")
WinWaitActive("Counter-Strike")
While 1
$Variable = PixelSearch(680,395,685,399,0xFF0000)
If IsArray($Variable) Then
MouseClick("LEFT")
EndIf

$Variable2 = PixelSearch(680,395,685,399,0xFF0101)
If IsArray($Variable2) Then
MouseClick("LEFT")
EndIf

$Variable3 = PixelSearch(680,395,685,399,0xBA0000)
If IsArray($Variable3) Then
MouseClick("LEFT")
EndIf
Sleep(200)
WEnd

Func _Exit()
Exit
EndFunc
Поставил этот лаги мощные но даже когда ищу 1 пиксель всеравно лагает что делать?


Добавлено:
Сообщение автоматически объединено:

Vovsla сказал(а):
Код:
HotKeySet('{F6}', '_Exit')
WinWaitActive('Counter-Strike')

SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')

While Sleep(100)
WEnd

Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func _Exit()
	Exit
EndFunc
Поставил этот и он не работает (лкм не нажимает)
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Да, там небольшой косяк, нужно было функцию поставить внутрь цикла, а то она 1 раз отрабатывает

Код:
HotKeySet('{F6}', '_Exit')
WinWaitActive('Counter-Strike')


While Sleep(100)
	SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')
WEnd

Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func _Exit()
	Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Кстати, не понятно, зачем однократно ждать активность окна, удобнее сделать запуск и остановку

Код:
Global $Search=False

HotKeySet('{F6}', 'Start_Stop')


While Sleep(100)
	If $Search Then SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')
WEnd



Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func Start_Stop()
	If $Search Then
		$Search=False
	Else
		$Search=True
	EndIf
EndFunc
 
Автор
A

amhad321

Новичок
Сообщения
6
Репутация
0
Vovsla сказал(а):
Да, там небольшой косяк, нужно было функцию поставить внутрь цикла, а то она 1 раз отрабатывает

Код:
HotKeySet('{F6}', '_Exit')
WinWaitActive('Counter-Strike')


While Sleep(100)
	SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')
WEnd

Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func _Exit()
	Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

Кстати, не понятно, зачем однократно ждать активность окна, удобнее сделать запуск и остановку

Код:
Global $Search=False

HotKeySet('{F6}', 'Start_Stop')


While Sleep(100)
	If $Search Then SearchPixels('0xFF0000, 0xFF0101, 0xBA0000')
WEnd



Func SearchPixels($PixString)
	$PixString=StringStripWS($PixString, 8)
	If $PixString='' Then Return SetError(1, 0, 0)
	$PixArr=StringSplit($PixString, ',')
	If Not IsArray($PixArr) Then Return SetError(2, 0, 0)

	For $Num = 1 To $PixArr[0]
		If PixelSearch(680, 395, 685, 399, $PixArr[$Num]) Then MouseClick('left')
	Next
EndFunc


Func Start_Stop()
	If $Search Then
		$Search=False
	Else
		$Search=True
	EndIf
EndFunc




cкопировал код , ввел себе прицелился на красный пиксель и не стреляет но ПОЧЕМУ?
кстати по цифрам видно что квадрат ультра маленький и полему лагает???Разрешение окна 800х600
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
amhad321, вы пробовали Ответ #4? И в варианте от Vovsla не правильно составлено условие потому что PixelSearch возвращает массив

Тем более вы просили сократить код, а это тоже самое что и
Код:
HotKeySet("{F6}", "_Exit")
WinWaitActive("Counter-Strike")

While Sleep(10)
    PixelSearch(680, 395, 685, 399, 0xFF0000)
    If Not @error Then MouseClick("LEFT")
    PixelSearch(680, 395, 685, 399, 0xFF0101)
    If Not @error Then MouseClick("LEFT")
    PixelSearch(680, 395, 685, 399, 0xBA0000)
    If Not @error Then MouseClick("LEFT")
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
Автор
A

amhad321

Новичок
Сообщения
6
Репутация
0
Вместо своего кода взял этот
Код:
#include <Misc.au3>
Global $Autoshoot = 0
;-------гор клавиши
HotKeySet ("{CAPSLOCK}", "startAutoshoot") ;старт
HotKeySet ("{DELETE}", "offAutoshoot") ;стоп
HotKeySet ("{F6}", "_Exit") ;выход
;-------- "тело" скрипта
While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000FF, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
 While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000D2, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
  While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x00008A, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
  While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000BA, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
   While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000048, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
   While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000042, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd
    While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000036, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
	   MouseClick('left') ;клик лкм
	EndIf
	EndIf
 WEnd


Func _Exit()
    Exit
EndFunc   ;==>_Exit
;-------функции
Func startAutoshoot() ; функция включения
    $Autoshoot = 1
 EndFunc ; конец функции
 Func offAutoshoot() ; функция выключения
    $Autoshoot = 0
EndFunc ; конец функции

Но он работает только при наведении на 0x0000FF тоесть весь остальной код не работает


Добавлено:
Сообщение автоматически объединено:

hedji сказал(а):
Код:
HotKeySet("{F6}","_Exit")
WinWaitActive("Counter-Strike")
While 1
$Variable = PixelSearch(680,395,685,399,0xFF0000)
If IsArray($Variable) Then
MouseClick("LEFT")
EndIf

$Variable2 = PixelSearch(680,395,685,399,0xFF0101)
If IsArray($Variable2) Then
MouseClick("LEFT")
EndIf

$Variable3 = PixelSearch(680,395,685,399,0xBA0000)
If IsArray($Variable3) Then
MouseClick("LEFT")
EndIf
Sleep(200)
WEnd

Func _Exit()
Exit
EndFunc
твой работает но с ним лагает.
Поможешь переписать этот чтобы все пиксели работали?
Код:
#include <Misc.au3>
Global $Autoshoot = 0
;-------гор клавиши
HotKeySet ("{CAPSLOCK}", "startAutoshoot") ;старт
HotKeySet ("{DELETE}", "offAutoshoot") ;стоп
HotKeySet ("{F6}", "_Exit") ;выход
;-------- "тело" скрипта
While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000FF, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
 While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000D2, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
  While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x00008A, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
  While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x0000BA, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
   While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000048, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
   While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000042, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd
    While 1
   Sleep (50)
   If $Autoshoot = 1 then ;
   PixelSearch(680, 395, 684, 399, 0x000036, 40, 2) ;поиск пикселя 0xE90E0B
    If Not @error then
       MouseClick('left') ;клик лкм
    EndIf
    EndIf
 WEnd


Func _Exit()
    Exit
EndFunc   ;==>_Exit
;-------функции
Func startAutoshoot() ; функция включения
    $Autoshoot = 1
 EndFunc ; конец функции
 Func offAutoshoot() ; функция выключения
    $Autoshoot = 0
EndFunc ; конец функции
 
Верх