Что нового

[World of Warcraft] Ускорение работы скипта

humerhead

Новичок
Сообщения
11
Репутация
0
Здравствуйте, форумчане. Пожалуйста, посоветуйте, как можно ускорить работу скрипта, если это возможно.

Код:
#include <Color.au3>
#include <Misc.au3>

Global $WinName = "World of Warcraft"
Global $state = "stop"
HotKeySet("{F11}", "GoRotate")
HotKeySet("{F12}", "NGoRotate")
While 1
    Running();
 WEnd

Func GoRotate()
    $state = "rotating"
 EndFunc

 Func NGoRotate()
    $state = "nrotating"
 EndFunc


Func  Running()
    Switch $state
    Case  "rotating"
        Rotating()
    EndSwitch
EndFunc
Func Rotating()
   $colorwhite = 16777215
   $colorblue = 65535
While $state = "rotating"
If PixelGetColor(5, 5) = $colorwhite Then
Send("{F7 down}");
Send("{F7 up}");
sleep(20);
EndIf
If PixelGetColor(5, 5) = $colorblue Then
Send("{F8 down}");
Send("{F8 up}");
sleep(20);
EndIf
   WEnd
EndFunc
Суть в том, что нужно более быстрое реагирование скрипта на смену пикселя и дальнейшее нажатие кнопки.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Func Rotating()
	$colorwhite = 16777215
	$colorblue = 65535
	While $state = "rotating"
		Switch PixelGetColor(5, 5)
			Case $colorwhite
				Send("{F7 down}")
				Send("{F7 up}")

			Case $colorblue
				Send("{F8 down}")
				Send("{F8 up}")

			Case Else
				ContinueLoop
		EndSwitch
		Sleep( 20 )
   WEnd
EndFunc

В два раза устроит?
 

lovelyvrn

Новичок
Сообщения
4
Репутация
0
firex сказал(а):
Код:
Func Rotating()
	$colorwhite = 16777215
	$colorblue = 65535
	While $state = "rotating"
		Switch PixelGetColor(5, 5)
			Case $colorwhite
				Send("{F7 down}")
				Send("{F7 up}")

			Case $colorblue
				Send("{F8 down}")
				Send("{F8 up}")

			Case Else
				ContinueLoop
		EndSwitch
		Sleep( 20 )
   WEnd
EndFunc

В два раза устроит?


А мне поможешь ускорить скрипт? :stars:
Код:
#include <WinAPIEx.au3>
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
Global $Paused, $counter = 0
HotKeySet("{F3}", "TogglePause")
HotKeySet("{F2}", "Terminate")
Shoot()
Func Shoot()
While 1
If _WinAPI_GetAsyncKeyState(0x02) = True Then
Local $coord = PixelSearch(669, 386, 695, 361,12191508,20)
If Not @error Then
MouseClick("Left")
Sleep(150)
EndIf
EndIf
WEnd
EndFunc
While 1
$counter +=1
WEnd
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
;ToolTip('Script is "Paused"',0,0, $counter, 1)
WEnd
ToolTip("")
EndFunc
Func Terminate()
Exit 0
EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
lovelyvrn
Конкретизируйте поставленную задачу, ибо в вашем коде ускорять нечего.
 
Автор
H

humerhead

Новичок
Сообщения
11
Репутация
0
У меня есть еще один вопрос. От версии autoiit зависит скорость работы скрипта?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
В место PixelGetColor использовать библиотеку FastFind
 
Автор
H

humerhead

Новичок
Сообщения
11
Репутация
0
Belfigor сказал(а):
В место PixelGetColor использовать библиотеку FastFind
Вот так примерно должно выглядеть? Или можно что-то исправить?
Код:
#include <FastFind.au3>
#include <Misc.au3>



Opt("SendKeyDelay", 0)
Global $WinName = "World of Warcraft"
Global $FFhWnd = WinGetHandle($WinName)
FFSetWnd($FFhWnd)


Global $state = "stop"
HotKeySet("{F10}", "GoRotate")
HotKeySet("{F11}", "NGoRotate")
While 1
    Running();
 WEnd

Func GoRotate()
    $state = "rotating"
 EndFunc

 Func NGoRotate()
    $state = "nrotating"
 EndFunc


Func  Running()
    Switch $state
    Case  "rotating"
        Rotating()
    EndSwitch
EndFunc





Func Rotating()
    $colorwhite = 16777215
    $colorblue = 65535
    While $state = "rotating"
	   FFSnapShot()
        Switch FFGetPixel(5, 5)
            Case $colorwhite
                Send("{PGUP 10}")


            Case $colorblue

				Send("{PGDN 10}")

            Case Else
                ContinueLoop
        EndSwitch
   WEnd
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Да, только если ты точно знаешь координаты пикселя, цвет которого тебе надо узнать, достаточно захватить снапшотом именно этот пиксель или изображение +- пару пикселей от него.
FF дает возможность однажды захватив изображение, провести на нем все нужные вычисления, и потом снова захватить следующий кадр, в отличии от PixelGetColor, который на каждый пиксель снова захватывает экран.
 
Автор
H

humerhead

Новичок
Сообщения
11
Репутация
0
Я плохо разобрался в функции FFSnapShot(). FFSnapShot(0, 0, 20, 20) - так должен выглядеть захват изображения площадью 20x20 пикселей в левом верхнем углу экрана?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
humerhead [?]
Я плохо разобрался в функции FFSnapShot(). FFSnapShot(0, 0, 20, 20) - так должен выглядеть захват изображения площадью 20x20 пикселей в левом верхнем углу экрана?
да, там еще вроде конкретное окно можно захватывать и работать относительно его координат


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

Там хелп очень вменяемый, почитай примеры
 
Верх