Что нового

Бот для игры Трофейная Рыбалка вконтакре (разроботка v 0.0.4)

Furrer

Новичок
Сообщения
18
Репутация
3
[info]
Версия 0.0.4
Добавлено:
  • Поборол течение
  • Заброс в случайную точку
  • Пофикшено поведение при запросах к серверу

Товарищи ботоводы если вам лень вникать и тем более писать что-то для меня то хотя бы посодействуйте теоретически. Ткнув носом в материал с которым по вашему мнению я должен ознакомится.
P.S. у меня проблема с англоязычными мануалами)))
[/info]
OffTopic:
Вчера нашел этот потрясающий форум! 4 часа танцев с бубном и вот скрипт уже может ловить и продавать рыбу. Он пока еще сырой и находится в разработке...


Работает в браузере Firefox на разрешении экрана 1280 х 1024
тестировано на локациях:
Заброшенный пруд
Радужный ручей
..возможно и другие

Возможности:
- поддерживает удочки TF 1000 и TF 1500 (возможно и другие)
- закидывает random
- вытягивает рыбу без применения энергии
- продает ее и поновой забрасывает...
- если нет связи с сервером бот живет своей жизнью несколько десятков минут :beer:

Планируется сделать в следующей версии:
- Автоматический ремонт удилищь с возвратом на последнюю локацию
- GUI Настройка точек (триггеров)
- Smart Применение энергии
- Сценарии поведения(смена локаций по расписанию, правильный выбор тактики и наживы)


Код скрипта:
Код:
Func exitthescript ()
    Exit
EndFunc
HotKeySet ( "{ESC}" , "exitthescript" )

WinWaitActive("Трофейная рыбалка | В Контакте | [vkOpt]","")
Sleep(1000)

While 1
	Dim $remont = PixelChecksum ( 684, 857, 723, 866, 2 )
	ToolTip($remont)
	Sleep(1000)
	
;~ 	Opt("MouseClickDownDelay",1580) ;дальний заброс для TF 1000
	Opt("MouseClickDownDelay",1580) ;дальний заброс для TF 1500
;~ 	MouseClick( "left", 752, 420, 1, 10 ) ; Заброс на пруду
	MouseClick( "left", Random(400, 800), 420, 1, 10 ) ; Заброс на ручье

	Sleep (1000)
	MouseMove ( 450, 420, 0)
	
While Hex(PixelGetColor ( 307 , 858 ),6) <> "FFFFFF"
	Dim $coord1 = PixelSearch(325, 397, 986, 404, 0xff0600, 60 ) ; поплавок на TF 1500 на ручье!
		If Not @error Then ; если поплавок попадает в область
			ToolTip(String ($coord1[0]))
			If $coord1[0] < 623 Then
				MouseMove ( 950, 420, 0) ; перебрасываем удочку в другой бок
			EndIf			
		Else  ; если поплавок вышел из области
			
			Sleep(200)
			MouseDown( "left" ) ; подсечка
			Sleep(200)
		
			While Hex(PixelGetColor ( 1055 , 736 ),6) == "FF7F00" ; если есть оранжевое солнышко
				Dim $coord2 = PixelSearch(1046, 604, 1047, 604, 0x131e26, 30 ) ; следим за силой натяга
				If Not @error  Then 
					ToolTip('ПОДТЯГИВАЮ')
					MouseDown( "left" )
				Else 
					ToolTip('СПУСКАЮ')
					MouseUp( "left" )
				EndIf
			WEnd
		
			$fish_wait = 0
			While 1 ; Ждем окошко с рыбой
				Sleep(100)
				$fish_wait = $fish_wait + 1
				ToolTip(String ($fish_wait))
				Select
					Case $fish_wait = 30 ; Ждем появления окошка 3 секунды проверяем интервалами по 100
						ExitLoop
					Case Hex(PixelGetColor ( 465 , 360 ),6) == "EEEEEE"
						Opt("MouseClickDownDelay",300) ; обычная задержка для клика по кнопкам 
						MouseClick( "left", 780, 576, 1, 10 ) ; продать рыбу
						ExitLoop
				EndSelect
			WEnd
			
			MouseUp( "left" )
			Sleep(2000)
			
		EndIf
WEnd
WEnd

Требуется совет:
- Есть великое желание открывать игру в GUI окне... я попытался как сдесь http://autoit-script.ru/index.php/topic,1179.0.html но вместо флешки у меня пустота (по райт-клику в этой области открывается всё таки меню флеша а не браузера но от этого не легче)
- Как лучше сделать распознование удочки (от этого зависит область поиска поплавка) если она не меняет свой внешний вид, а только в низу на панели меняется надпись.
попытаюсь сделать по PixelChecksum области где нарисована удочка

- и тоже самое нужно идти чинить удочку когда придет время (% удочки указывается рядом с ее названием в виде цифр)

- я нашел тут разные способы определеня флеша на странице обязательно всё попробую! Но хотел бы послушать мнения грамотных ботоводов! как это лучше сделать в моем случае?
заюзал через ControlGetPos

- на последнем скриншоте видно что ToolTip('СПУСКАЮ') остается висеть когда рыба выловлена это может быть связанно с тем что я не выставил время отображения этого тултипа? (на данный момент там остается ToolTip('ПОДТЯГИВАЮ') просто скриншот более старого скрипта) Можно как-то выставить время отображения для ToolTip?

Скиншоты:


 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
Подскажите! мне нужно отслеживать смещение точки неважно в отрицательном или положительном направлении. Есть функция которая если нужно уберает знак "-" из чисел? :-[

...Обнаружил что на разных компах разное время взвода удочки (чем дальше введешь и тем дальше закидывает, а там клёв лучше) а значит фиксированное значение времени взвода не подходит!
Пытался отследить время используя таймер который считает за сколько она доходит до крайнего положения :wacko: оказалось сей таймер брешет гдето на 50-100 можно конешно заведома вычитать из полученного это значение... но кто знает что выдаст таймер на других компах если у меня значение таймера не повторилось ни разу из 100 попыток)))
Подумываю о том от чего раньше хотел уходить "калибровка удочек методом научного тыка"
подробнее позже...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Код:
MsgBox(0,0,Abs(-1000))
 

Fleshvinn

Новичок
Сообщения
5
Репутация
1
Отписался в теме о запуске флеша в Гуи окне...
Может банально но мне помогло ... приложыл скрин с работающим окном
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
нарыл вот это... здесь http://autoit-script.ru/index.php/topic,785.0.html
Код:
#include-once
#include <WinAPI.au3>
#include <GDIPlus.au3>

; #INDEX# =======================================================================================================================
; Title .........: Screen Capture
; AutoIt Version: 3.2.3++
; Language:       English
; Description ...: This module allows you to copy the screen or a region of the screen and save it to file. Depending on the type
;                  of image, you can set various image parameters such as pixel format, quality and compression.
; Author ........: Paul Campbell (PaulIA)
; ===============================================================================================================================

; #VARIABLES# ===================================================================================================================
Global $giBMPFormat = $GDIP_PXF24RGB
Global $giJPGQuality = 100
Global $giTIFColorDepth = 24
Global $giTIFCompression = $GDIP_EVTCOMPRESSIONLZW
Global Const $__SCREENCAPTURECONSTANT_SM_CXSCREEN = 0
Global Const $__SCREENCAPTURECONSTANT_SM_CYSCREEN = 1
Global Const $__SCREENCAPTURECONSTANT_SRCCOPY = 0x00CC0020
; ===============================================================================================================================

;==============================================================================================================================
; #CURRENT# =====================================================================================================================
;_ScreenCapture_Capture
;_ScreenCapture_CaptureWnd
;_ScreenCapture_SaveImage
;_ScreenCapture_SetBMPFormat
;_ScreenCapture_SetJPGQuality
;_ScreenCapture_SetTIFColorDepth
;_ScreenCapture_SetTIFCompression
; ===============================================================================================================================
;==============================================================================================================================

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_Capture
; Description ...: Captures a region of the screen
; Syntax.........: _ScreenCapture_Capture([$sFileName = ""[, $iLeft = 0[, $iTop = 0[, $iRight = -1[, $iBottom = -1[, $fCursor = True]]]]]])
; Parameters ....: $sFileName   - Full path and extension of the image file
;                  $iLeft       - X coordinate of the upper left corner of the rectangle
;                  $iTop        - Y coordinate of the upper left corner of the rectangle
;                  $iRight      - X coordinate of the lower right corner of the rectangle.  If this is  -1,  the  current  screen
;                  +width will be used.
;                  $iBottom     - Y coordinate of the lower right corner of the rectangle.  If this is  -1,  the  current  screen
;                  +height will be used.
;                  $fCursor     - If True the cursor will be captured with the image
; Return values .: See remarks
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If FileName is not blank this function will capture the screen and save it to file. If FileName is blank, this
;                  function will capture the screen and return a HBITMAP handle to the bitmap image.  In this case, after you are
;                  finished with the bitmap you must call _WinAPI_DeleteObject to delete the bitmap handle.
;+
;                  Requires GDI+: GDI+ requires a redistributable for applications  that
;                  run on the Microsoft Windows NT 4.0 SP6, Windows 2000, Windows 98, and Windows Me operating systems.
; Related .......: _WinAPI_DeleteObject
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _ScreenCapture_Capture($sFileName = "", $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1, $fCursor = $incl_cursor)
	Local $iH, $iW, $hWnd, $hDDC, $hCDC, $hBMP, $aCursor, $aIcon, $hIcon

	If $iRight = -1 Then $iRight = _WinAPI_GetSystemMetrics($__SCREENCAPTURECONSTANT_SM_CXSCREEN)
	If $iBottom = -1 Then $iBottom = _WinAPI_GetSystemMetrics($__SCREENCAPTURECONSTANT_SM_CYSCREEN)
	If $iRight < $iLeft Then Return SetError(-1, 0, 0)
	If $iBottom < $iTop Then Return SetError(-2, 0, 0)

	$iW = $iRight - $iLeft
	$iH = $iBottom - $iTop
	$hWnd = _WinAPI_GetDesktopWindow()
	$hDDC = _WinAPI_GetDC($hWnd)
	$hCDC = _WinAPI_CreateCompatibleDC($hDDC)
	$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iW, $iH)
	_WinAPI_SelectObject($hCDC, $hBMP)
	_WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, $iLeft, $iTop, $__SCREENCAPTURECONSTANT_SRCCOPY)

	If $fCursor Then
		$aCursor = _WinAPI_GetCursorInfo()
		If $aCursor[1] Then
			$hIcon = _WinAPI_CopyIcon($aCursor[2])
			$aIcon = _WinAPI_GetIconInfo($hIcon)
			_WinAPI_DrawIcon($hCDC, $aCursor[3] - $aIcon[2] - $iLeft, $aCursor[4] - $aIcon[3] - $iTop, $hIcon)
			_WinAPI_DestroyIcon($hIcon)
		EndIf
	EndIf

	_WinAPI_ReleaseDC($hWnd, $hDDC)
	_WinAPI_DeleteDC($hCDC)
	If $sFileName = "" Then Return $hBMP

	_ScreenCapture_SaveImage($sFileName, $hBMP)
	_WinAPI_DeleteObject($hBMP)
EndFunc   ;==>_ScreenCapture_Capture

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_CaptureWnd
; Description ...: Captures a screen shot of a specified window
; Syntax.........: _ScreenCapture_CaptureWnd($sFileName, $hWnd[, $iLeft = 0[, $iTop = 0[, $iRight = -1[, $iBottom = -1[, $fCursor = True]]]]])
; Parameters ....: $sFileName   - Full path and extension of the image file
;                  $hWnd        - Handle to the window to be captured
;                  $iLeft       - X coordinate of the upper left corner of the client rectangle
;                  $iTop        - Y coordinate of the upper left corner of the client rectangle
;                  $iRight      - X coordinate of the lower right corner of the rectangle
;                  $iBottom     - Y coordinate of the lower right corner of the rectangle
;                  $fCursor     - If True the cursor will be captured with the image
; Return values .: See remarks
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If FileName is not blank this function will capture the screen and save it to file. If FileName is blank, this
;                  function will capture the screen and return a HBITMAP handle to the bitmap image.  In this case, after you are
;                  finished with the bitmap you must call _WinAPI_DeleteObject to delete the bitmap handle.  All coordinates are  in
;                  client coordinate mode.
;+
;                  Requires GDI+: GDI+ requires a redistributable for applications  that
;                  run on the Microsoft Windows NT 4.0 SP6, Windows 2000, Windows 98, and Windows Me operating systems.
; Related .......: _WinAPI_DeleteObject
; Link ..........;
; Example .......; Yes
; Credits .......: Thanks to SmOke_N for his suggestion for capturing part of the client window
; ===============================================================================================================================
Func _ScreenCapture_CaptureWnd($sFileName, $hWnd, $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1, $fCursor = $incl_cursor)
	Local $tRect

	$tRect = _WinAPI_GetWindowRect($hWnd)
	$iLeft += DllStructGetData($tRect, "Left")
	$iTop += DllStructGetData($tRect, "Top")
	If $iRight = -1 Then $iRight = DllStructGetData($tRect, "Right") - DllStructGetData($tRect, "Left")
	If $iBottom = -1 Then $iBottom = DllStructGetData($tRect, "Bottom") - DllStructGetData($tRect, "Top")
	$iRight += DllStructGetData($tRect, "Left")
	$iBottom += DllStructGetData($tRect, "Top")
	If $iLeft > DllStructGetData($tRect, "Right") Then $iLeft = DllStructGetData($tRect, "Left")
	If $iTop > DllStructGetData($tRect, "Bottom") Then $iTop = DllStructGetData($tRect, "Top")
	If $iRight > DllStructGetData($tRect, "Right") Then $iRight = DllStructGetData($tRect, "Right")
	If $iBottom > DllStructGetData($tRect, "Bottom") Then $iBottom = DllStructGetData($tRect, "Bottom")
	Return _ScreenCapture_Capture($sFileName, $iLeft, $iTop, $iRight, $iBottom, $fCursor)
EndFunc   ;==>_ScreenCapture_CaptureWnd

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_CaptureAeroWnd
; Description ...: Captures a screen shot of a specified aero window
; Syntax.........: _ScreenCapture_CaptureAeroWnd($sFileName, $hWnd[, $iLeft = 0[, $iTop = 0[, $iRight = -1[, $iBottom = -1[, $fCursor = True]]]]])
; Parameters ....: $sFileName   - Full path and extension of the image file
;                  $hWnd        - Handle to the window to be captured
;                  $fCursor     - If True the cursor will be captured with the image
; Author ........: KaFu
; Link ..........;
; Example .......; Yes
; Credits .......:  Translating to function - [Nuker-Hoax]
; ===============================================================================================================================
Func _ScreenCapture_CaptureAeroWnd($sFileName, $hWnd, $fCursor = $incl_cursor)
    Local $aPos[4], $tRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local Const $DWMWA_EXTENDED_FRAME_BOUNDS = 9
    DllCall("dwmapi.dll", "hwnd", "DwmGetWindowAttribute", "hwnd", WinGetHandle($hWnd), "dword", $DWMWA_EXTENDED_FRAME_BOUNDS, "ptr", DllStructGetPtr($tRect), "dword", DllStructGetSize($tRect))
    If @error Then Return SetError(0, 0, _ScreenCapture_CaptureWnd($sFileName, $hWnd))
    Local $iRectLeft = DllStructGetData($tRect, "Left")
    Local $iRectTop = DllStructGetData($tRect, "Top")
    Local $iRectRight = DllStructGetData($tRect, "Right")
    Local $iRectBottom = DllStructGetData($tRect, "Bottom")
    If Abs($iRectLeft) + Abs($iRectTop) + Abs($iRectRight) + Abs($iRectBottom) > 0 Then
        Return SetError(0, 1, _ScreenCapture_Capture($sFileName, $iRectLeft, $iRectTop, $iRectRight, $iRectBottom, $fCursor))
    EndIf
    Return SetError(0, 0, _ScreenCapture_CaptureWnd($sFileName, $hWnd))
EndFunc   ;==>_ScreenCapture_CaptureAeroWnd

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_SaveImage
; Description ...: Saves an image to file
; Syntax.........: _ScreenCapture_SaveImage($sFileName, $hBitmap[, $fFreeBmp = True])
; Parameters ....: $sFileName   - Full path and extension of the bitmap file to be saved
;                  $hBitmap     - HBITMAP handle
;                  $fFreeBmp    - If True, hBitmap will be freed on a successful save
; Return values .: Success      - True
;                  Failure      - False
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: This function saves a bitmap to file, converting it to the image format specified by the file name  extension.
;                  For Windows XP, the valid extensions are BMP, GIF, JPEG, PNG and TIF.
;+
;                  Requires GDI+: GDI+ requires a redistributable for applications  that
;                  run on the Microsoft Windows NT 4.0 SP6, Windows 2000, Windows 98, and Windows Me operating systems.
; Related .......: _ScreenCapture_Capture
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _ScreenCapture_SaveImage($sFileName, $hBitmap, $fFreeBmp = True)
	Local $hClone, $sCLSID, $tData, $sExt, $hImage, $pParams, $tParams, $iResult, $iX, $iY

	_GDIPlus_Startup()
	If @error Then Return SetError(-1, -1, False)

	$sExt = StringUpper(_GDIPlus_ExtractFileExt($sFileName))
	$sCLSID = _GDIPlus_EncodersGetCLSID($sExt)
	If $sCLSID = "" Then Return SetError(-2, -2, False)
	$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
	If @error Then Return SetError(-3, -3, False)

	Switch $sExt
		Case "BMP"
			$iX = _GDIPlus_ImageGetWidth($hImage)
			$iY = _GDIPlus_ImageGetHeight($hImage)
			$hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $iX, $iY, $giBMPFormat)
			_GDIPlus_ImageDispose($hImage)
			$hImage = $hClone
		Case "JPG", "JPEG"
			$tParams = _GDIPlus_ParamInit(1)
			$tData = DllStructCreate("int Quality")
			DllStructSetData($tData, "Quality", $giJPGQuality)
			_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, DllStructGetPtr($tData))
		Case "TIF", "TIFF"
			$tParams = _GDIPlus_ParamInit(2)
			$tData = DllStructCreate("int ColorDepth;int Compression")
			DllStructSetData($tData, "ColorDepth", $giTIFColorDepth)
			DllStructSetData($tData, "Compression", $giTIFCompression)
			_GDIPlus_ParamAdd($tParams, $GDIP_EPGCOLORDEPTH, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "ColorDepth"))
			_GDIPlus_ParamAdd($tParams, $GDIP_EPGCOMPRESSION, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Compression"))
	EndSwitch
	If IsDllStruct($tParams) Then $pParams = DllStructGetPtr($tParams)

	$iResult = _GDIPlus_ImageSaveToFileEx($hImage, $sFileName, $sCLSID, $pParams)
	_GDIPlus_ImageDispose($hImage)
	If $fFreeBmp Then _WinAPI_DeleteObject($hBitmap)
	_GDIPlus_Shutdown()

	Return SetError($iResult = False, 0, $iResult = True)
EndFunc   ;==>_ScreenCapture_SaveImage

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_SetBMPFormat
; Description ...: Sets the bit format that will be used for BMP screen captures
; Syntax.........: _ScreenCapture_SetBMPFormat($iFormat)
; Parameters ....: $iFormat     - Image bits per pixel (bpp) setting:
;                  |0 = 16 bpp; 5 bits for each RGB component
;                  |1 = 16 bpp; 5 bits for red, 6 bits for green and 5 bits blue
;                  |2 = 24 bpp; 8 bits for each RGB component
;                  |3 = 32 bpp; 8 bits for each RGB component. No alpha component.
;                  |4 = 32 bpp; 8 bits for each RGB and alpha component
; Return values .:
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If not explicitly set, BMP screen captures default to 24 bpp
; Related .......:
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _ScreenCapture_SetBMPFormat($iFormat)
	Switch $iFormat
		Case 0
			$giBMPFormat = $GDIP_PXF16RGB555
		Case 1
			$giBMPFormat = $GDIP_PXF16RGB565
		Case 2
			$giBMPFormat = $GDIP_PXF24RGB
		Case 3
			$giBMPFormat = $GDIP_PXF32RGB
		Case 4
			$giBMPFormat = $GDIP_PXF32ARGB
		Case Else
			$giBMPFormat = $GDIP_PXF24RGB
	EndSwitch
EndFunc   ;==>_ScreenCapture_SetBMPFormat

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_SetJPGQuality
; Description ...: Sets the quality level that will be used for JPEG screen captures
; Syntax.........: _ScreenCapture_SetJPGQuality($iQuality)
; Parameters ....: $iQuality    - The quality level of the image. Must be in the range of 0 to 100.
; Return values .:
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If not explicitly set, JPEG screen captures default to a quality level of 100
; Related .......:
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _ScreenCapture_SetJPGQuality($iQuality)
	If $iQuality < 0 Then $iQuality = 0
	If $iQuality > 100 Then $iQuality = 100
	$giJPGQuality = $iQuality
EndFunc   ;==>_ScreenCapture_SetJPGQuality

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_SetTIFColorDepth
; Description ...: Sets the color depth used for TIFF screen captures
; Syntax.........: _ScreenCapture_SetTIFColorDepth($iDepth)
; Parameters ....: $iDepth      - Image color depth:
;                  | 0 - Default encoder color depth
;                  |24 - 24 bit
;                  |32 - 32 bit
; Return values .:
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If not explicitly set, TIFF screen captures default to 24 bits
; Related .......: _ScreenCapture_SetTIFCompression
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _ScreenCapture_SetTIFColorDepth($iDepth)
	Switch $iDepth
		Case 24
			$giTIFColorDepth = 24
		Case 32
			$giTIFColorDepth = 32
		Case Else
			$giTIFColorDepth = 0
	EndSwitch
EndFunc   ;==>_ScreenCapture_SetTIFColorDepth

; #FUNCTION# ====================================================================================================================
; Name...........: _ScreenCapture_SetTIFCompression
; Description ...: Sets the compression used for TIFF screen captures
; Syntax.........: _ScreenCapture_SetTIFCompression($iCompress)
; Parameters ....: $iCompress   - Image compression type:
;                  |0 - Default encoder compression
;                  |1 - No compression
;                  |2 - LZW compression
; Return values .:
; Author ........: Paul Campbell (PaulIA)
; Modified.......:
; Remarks .......: If not explicitly set, TIF screen captures default to LZW compression
; Related .......: _ScreenCapture_SetTIFColorDepth
; Link ..........;
; Example .......;
; ===============================================================================================================================
Func _ScreenCapture_SetTIFCompression($iCompress)
	Switch $iCompress
		Case 1
			$giTIFCompression = $GDIP_EVTCOMPRESSIONNONE
		Case 2
			$giTIFCompression = $GDIP_EVTCOMPRESSIONLZW
		Case Else
			$giTIFCompression = 0
	EndSwitch
EndFunc   ;==>_ScreenCapture_SetTIFCompression

Но я практически ничего тут не понимаю :wacko: Мне нужна функция которая будет делать скриншот указанной области например при ошибке PixelSearch иначе в динамике невозможно вовремя нажать принскрин и выяснить почему он не находит цвет...
Еще было бы неплохо чтоб ей можно было указывать формат файла BMP или JPG (качество и ресайз) для последнего. Потому что потом я планирую использовать эту функцию в других целях...

Другие цели:
Создание лога в HTML формате!
Можно было бы каждый раз когда рыба поймана выводить окошко в которое можно ввести ее название которое сохранится в файл настройки вместе с PixelChecksum области картинки рыбы и в последствии научить бота распозновать рыбу самостоятельно но в игре почти 200 видов рыб и еще в лог хочется сохранять вес, цену и сколько энергии за нее предлагали, а это извините головняк.

Проще сохранять картинки а уж потом дописать скриптец который одним махом проанализирует их и предложит вписать названия!

Разжуйте мне пожалуйста такую функцию потому, что тут с моим медицинским образованием без посторонней помощи никак.
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
OffTopic:
довожу дело до абсурда))) решил что мне нужно вести детальную статистику по выловленной рыбе. К сожалению я не представляю как получить переменные из игры... Если это возможно ОСТАНОВИТЕ МЕНЯ! пока я не начал писать нейронную сеть))))
на данный момент пытаюсь распознать циферки (вес рыбы, бабки и энергию которые за нее дают) по PixelSearch из комочка пикселей т.е. не один PixelSearch, а для каждой точки свой...
т.к. нужно отсеивать полутона (поэтому PixelGetColor не подходит ... хотя это я так думаю))
..позже в этом посте я подробнее напишу что я делал и что у меня получилось покачто я стабильно распознаю "0" ))) .. и это радует


:laugh: Поборол распознавание! ..пока что цифры только большого шрифта в окне с рыбой (3 скрин вверху) плавающую точку по идее тоже должно распознавать, а пока я не выловил ничего более 10 кг чтоб это проверить((



Код:
Func _SoldFish ()
	Dim $WeightPos = PixelSearch( $GamePos[0]+171,  $GamePos[1]+349, $GamePos[0]+171+220, $GamePos[1]+349+2, 0x7c6059, 10 ) ; ищем позицию слова Масса
	MouseMove($WeightPos[0],$WeightPos[1], 20)	
	$WeightPos[0] += 57 ; смещаемся к цифрам

		Dim $Matrix[11][4] = [[0,0,1,1],[4,0,1,0],[7,0,1,1],[6,3,1,1],[0,5,1,1],[4,5,1,0],[7,5,1,1],[1,7,1,1],[0,11,1,1],[4,11,1,0],[7,11,1,1]] ; закрашиваем всю матрицу [1][3],[5][3],[9][3] вообще в расчете не учитываются
		Dim $string = ""
		
	While 1	
		
		$dot = PixelSearch( $WeightPos[0], $WeightPos[1], $WeightPos[0]+4, $WeightPos[1]+11, 0x654b43, 15)  ; поиск для "."
		If Not @error Then
			If $dot[1]-$WeightPos[1] > 2 Then
				$string &= "."
				$WeightPos[0] += 5
				
			Else
				
				$m = 0
				
				While $m < 11 
					If $m = 1 Or $m = 5 Or $m = 9 Then ; скан для одинарных точек
						$point = PixelSearch( $WeightPos[0]+$Matrix[$m][0], $WeightPos[1]+$Matrix[$m][1], $WeightPos[0]+$Matrix[$m][0], $WeightPos[1]+$Matrix[$m][1], 0xebebeb, 100)
						$Matrix[$m][2] = @error
					Else ; скан для двойных точек
						$point = PixelSearch( $WeightPos[0]+$Matrix[$m][0], $WeightPos[1]+$Matrix[$m][1], $WeightPos[0]+$Matrix[$m][0], $WeightPos[1]+$Matrix[$m][1], 0xebebeb, 100)
						$Matrix[$m][2] = @error
						$point = PixelSearch( $WeightPos[0]+$Matrix[$m][0]+1, $WeightPos[1]+$Matrix[$m][1], $WeightPos[0]+$Matrix[$m][0]+1, $WeightPos[1]+$Matrix[$m][1], 0xebebeb, 100)
						$Matrix[$m][3] = @error
					EndIf
					$m += 1 
				WEnd
				
				$m = 0
				While $m < 11 ; сумируем точки
					If $Matrix[$m][2] = 1 Or $Matrix[$m][3] = 1 Then
						$Matrix[$m][2] = 1
					EndIf
					$m += 1
				WEnd
				
				Select
					Case $Matrix[5][2] = 0
						Select
							Case $Matrix[8][2] = 0 And $Matrix[9][2] = 0 And $Matrix[10][2] = 0 
								$string &= "4"
							Case $Matrix[7][2] = 0 And $Matrix[8][2] = 1
								$string &= "2"
							Case $Matrix[7][2] = 0 And $Matrix[8][2] = 0
								$string &= "9"
							Case $Matrix[3][2] = 1 And $Matrix[7][2] = 1
								$string &= "0"
						EndSelect
					Case $Matrix[5][2] = 1
						Select
							Case $Matrix[2][2] = 0 And $Matrix[3][2] = 0 And $Matrix[7][2] = 0 
								$string &= "1"
							Case $Matrix[0][2] = 0 And $Matrix[3][2] = 1 And $Matrix[7][2] = 0
								$string &= "3"
							Case $Matrix[4][2] = 1 And $Matrix[7][2] = 0
								$string &= "5"
							Case $Matrix[4][2] = 1 And $Matrix[7][2] = 1
								$string &= "6"
							Case $Matrix[0][2] = 1 And $Matrix[1][2] = 1 And $Matrix[2][2] = 1 
								$string &= "7"
							Case $Matrix[3][2] = 1 And $Matrix[7][2] = 1
								$string &= "8"
						EndSelect
					Case Else
					$string &= "(цифра)"
				EndSelect
				
;~ 				$m = 0
;~ 				$string &= @LF
;~ 				While $m < 11 ; формируем отчет
;~ 					$string &= $Matrix[$m][2]&" "
;~ 					$m += 1
;~ 				WEnd
;~ 				$string &= @LF & @LF 
				
				
				$WeightPos[0] += 9	
			EndIf
		Else
			ExitLoop
		EndIf
	WEnd	
	
	MsgBox(0, "Сканирование массы", $string)
EndFunc

Подскажите мне как можно эту функцию применить не к текущему изображению экрана а к скриншоту! причем лучше всего при этом не сохранять скриншот в файл, а просто держать его в буфере где-нить и очищать после просчета?!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
http://autoit-script.ru/index.php/topic,182.0.html
Чудно подойдет для примитивного распознающего движка.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Со скриншотами никогда не работал, но поищи, мб есть какие-то функции которые используют OCR движок файн ридеров.
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
Ты вообще не в ту степь думаешь!!! причем тут фаинридеры? мне просто нужно чтоб в начале функции картинка заносилась куда-то типа буфера а потом PixelSearch и PixelGetColor работали не с экраном а с этой картинкой!
просто если распознаваемое значение на экране меняется то пока функция распознает одну цифру другая уже может поменятся в итоге оно распознает полную билиберду! поэтому надо применять ее к скриншоту))

И еще вопросик.. мож всё таки как-то можно выдрать переменные из флеша.. ну по типу как ArtMoney в оффлайновых играх... флешка в браузерном процессе создает какие-то переменные.. как там можно порыться при помощи автоита?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Вроде на самом сайте артмани написано что этим можно даже не пытаться заниматься. То что ты просишь видел на оффоруме пару лет назад. На данным момент не представляю даже как искать это там :(. Еще как-то люди делали обрабатывая изображение командами из библиотеки GDI+. Но я в ней не разбираюсь :smile:


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

Furrer сказал(а):
- на последнем скриншоте видно что ToolTip('СПУСКАЮ') остается висеть когда рыба выловлена это может быть связанно с тем что я не выставил время отображения этого тултипа? (на данный момент там остается ToolTip('ПОДТЯГИВАЮ') просто скриншот более старого скрипта) Можно как-то выставить время отображения для ToolTip?
Чтобы очистить ToolTip тебе надо использовать команду:
Код:
ToolTip("Ждем секунду", 0, 0)
sleep(1000)
ToolTip("")
sleep(2000)
ToolTip("Ждем еще секунду")
sleep(1000)
MsgBox(0,0,"Прошло 4 секунды!")
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
Теперь вопрос по GUI ...
OffTopic:
Как мне сделать чтоб главное окно скрипта выравнивалось относительно флешки и как можно ресайзить и перемещать програмно окно во время работы?
Должно работать в режиме OnEvent и висеть поверх всех окон удобно распологаясь относительно игрухи. Хочу что б кнопки хакрытия окна были скрыты были скрыты в окне выводилась информация о состоянии выполнения скрипта и перечень горячих клавиш.

прежний вопрос потерял актуальность так как решилась вот эта тема http://autoit-script.ru/index.php/topic,1179.msg23411.html#msg23411
На данный момент актуально:
- реализовать поиск файла api_wrapper*.swf в @UserProfileDir&"\"&"AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\? ? ? ? ? ? ? ?\
- почему Koda выдает ошибку при работе Shell.Explorer.2
- как запретить скролинг Shell.Explorer.2
- как разлогинивать контакт по $GUI_EVENT_CLOSE
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Furrer сказал(а):
- как разлогинивать контакт по $GUI_EVENT_CLOSE
Если ты знаешь как разлогинивать контакт в принципе, то достаточно встроить этот метод в OnAutoItExitRegister
Код:
OnAutoItExitRegister("MyTestFunc")
OnAutoItExitRegister("MyTestFunc2")

Sleep(1000)

Func  MyTestFunc()
    MsgBox(64, "Exit Results  1", 'Exit  Message from MyTestFunc()')
EndFunc

Func  MyTestFunc2()
    MsgBox(64, "Exit Results  2", 'Exit  Message from MyTestFunc()')
EndFunc
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
да у меня разлогинивает так ... только надо Sleep ставить

Код:
Func _UnLogin ()
	ControlClick("Form1", "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "left", 1,	821, 25) ; разлогиниваемся	
 	Sleep(1000)
EndFunc


В такой вот ситуации

Код:
Global $Game = ObjCreate("Shell.Explorer.2")
Global $Game_ctrl = GUICtrlCreateObj($Game, -155, -45, 1024, 800); -45
$Game.navigate("http://vkontakte.ru/app1844622_3547976")


Как насчет поиска PixelSearch в неактивном окне??
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Код:
Opt("PixelCoordMode", 2)
PixelSearch(x1, y1, x2, y2, col, shade, step, $CurWin_hwnd)
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
:'( не помогает что нужно указать в $CurWin_hwnd ? Я ставил заголовок окна..
а еще мне попадала тема(дето на другом форуме с твоими коментами) с имитацией кликов в неактивном окне я так и не понял зачем нужно использjвать DllCall чем оно отличается от ControlClick и еще меня очень волнует можно как то в неактивном окне сделать имитацию такого

Код:
Opt("MouseClickDownDelay", 1580)
MouseClick( "left", $х, $у, 1, 20 )


Короче суть в том что я хочу свой "продвинутый кликер" полностьюу пересадить на GUI. Тобиж флешка будет открываться в GUI окне. Мне хотелось что бы он мог работать в неактивном окне. Подчеркиваю не просто в неактивном но еще и перекрытом другим окном ну или хотя бы чтоб оно убиралось куданить за экран и была возможность совершать какие-то другие действия в то время как он ловит рыбку.
Такое вообще реально или я губу раскатал?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Код:
Global $CurWin = "Win Name"
Global $CurWin_hwnd = WinGetHandle($CurWin)

Там рассматривалась ситуация относительно EVE Online, где автоитовский контрол клик работает не так как надо.
WinAPI команды не могут узнать цвет пикселя в окне задвинутом задвинутом за пределы видимой области экрана или же перекрытом другим окном. Но например на больших экранах удобно и без этого. У меня разрешение экрана 2560х1600, я ставлю два окна EVE Online с левой стороны. И боты у меня спокойно работают в неактивном окне по средством ControlSend и PixelSearch м хэндлом. Выглядит все примерно вот так: http://i56.tinypic.com/zvzui1.jpg . Я тыкаюсь в любые окна, делаю в них что хочу, нажимаю что хочу, а боты независимо от этого стабильно работают, им главное чтобы окна не сворачивались и не перекрывались другими.
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
О я разобрался! если можно прокомментировать что значит эта функция

Код:
Func _MakeLong($LoWord,$HiWord)
Return BitOR($HiWord*0x10000,BitAND($LoWord,0xFFFF))
EndFunc


А PixelSearch и PixelGetColor по идее работают в задвинутом окне если оно так и есть то меня устроит! а клик с задержкой я понял что можно имитировать примерно так

Код:
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi),"int",$MM,"int",0,"long",_MakeLong($X1, $Y1))
DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$ButtonDown,"int",$Button,"long",_MakeLong($X1, $Y1))
Sleep(1580)
DllCall("user32.dll", "int", "SendMessage","hwnd",WinGetHandle( $WinTi ),"int",$ButtonUp,"int",$Button,"long",_MakeLong($X1, $Y1))


Мне осталось только понять насколько DllCall работает медленнее чем ControlSend. Может есть смысл сначала заранее делать DllOpen? А то у меня там есть момент когда нужно делать
Код:
While Hex(PixelGetColor (  $GamePos[0]+762,  $GamePos[1]+564 ),6) == "FF7F00" ; если есть оранжевое солнышко
				Dim $PowerCoord = PixelSearch( $GamePos[0]+753,  $GamePos[1]+432, $GamePos[0]+754, $GamePos[1]+433, 0x131e26, 30 ) ; следим за силой натяга
				If Not @error  Then 
					ToolTip('ПОДТЯГИВАЮ')
					MouseDown( "left" )
				Else 
					ToolTip('СПУСКАЮ')
					MouseUp( "left" )
				EndIf
			WEnd

Причем в игре почему-то предусмотрено что человек не успевает за этим индикатором и поидее задержка где-то на 500-800мс должна прокатывать.

И опять вопрос... а можно сделать чтоб окно по нажатии на кнопочку в верхнем правом углу "Свернуть" уезжало за экран а при нажатии на приложение в панели внизу выезжало обратно... ну или можно ли сделать трейнуюю иконку и по клику на нее Уехать(свернуть) / Приехать(развернуть). Хотя первый вариант мне нравится больше.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
PixelSearch и PixelGetColor не работают за пределами экрана.
_MakeLong комбинирует два числа в одно для того чтобы user32.dll понимала куда надо ткнуть. DllOpen можно сделать в начале скрипта.
 
Автор
F

Furrer

Новичок
Сообщения
18
Репутация
3
Как Можно превратить эти функции в одну универсальную?

Код:
Func _GetCurrents ()

Global $ConfigFile = "config.ini"
	
Global $BaitFaces = IniReadSection ( $ConfigFile, "BaitFaces" )
	If @error Then 
		IniWrite( $ConfigFile,"BaitFaces", "", "")
		IniDelete ( $ConfigFile, "BaitFaces", "" )
	EndIf
Global $FoodFaces = IniReadSection ( $ConfigFile, "FoodFaces" )
	If @error Then 
		IniWrite( $ConfigFile,"FoodFaces", "", "")
		IniDelete ( $ConfigFile, "FoodFaces", "" )
	EndIf
Global $HookFaces = IniReadSection ( $ConfigFile, "HookFaces" )
	If @error Then 
		IniWrite( $ConfigFile,"FoodFaces", "", "")
		IniDelete ( $ConfigFile, "FoodFaces", "" )
	EndIf
Global $DepthFaces = IniReadSection ( $ConfigFile, "DepthFaces" )
	If @error Then 
		IniWrite( $ConfigFile,"FoodFaces", "", "")
		IniDelete ( $ConfigFile, "FoodFaces", "" )
	EndIf

 	_GetCurrentBait()
 	_GetCurrentFood()
 	_GetCurrentHook ()
 	_GetCurrentDepth ()
	
EndFunc
Func _GetCurrentBait ()

		$BaitFace = PixelChecksum($GamePos[0]+517, $GamePos[1]+688, $GamePos[0]+517+20, $GamePos[1]+688+20, 3, $MainHwnd)
			If Not @error Then
			$Serch = _ArraySearch($BaitFaces, $BaitFace )
				If @error Then
					IniWrite( $ConfigFile,"BaitFaces", $BaitFace, $BaitFace)
					_GUICtrlStatusBar_SetText($StatusBar,  "Приманка "&$BaitFace, 0)
				Else
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$BaitFaces[$Serch][1], 0)
				EndIf
			Else
				_GUICtrlStatusBar_SetText($StatusBar,  "Хрень с приманкой", 3)
			EndIf
EndFunc
Func _GetCurrentFood ()
		$FoodFace = PixelChecksum($GamePos[0]+555, $GamePos[1]+688, $GamePos[0]+555+20, $GamePos[1]+688+20, 3, $MainHwnd)
			If Not @error Then
					
			$Serch = _ArraySearch($FoodFaces, $FoodFace )
				If @error Then
					IniWrite( $ConfigFile,"FoodFaces", $FoodFace, $FoodFace)
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$FoodFace, 1)
				Else
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$FoodFaces[$Serch][1], 1)
				EndIf
			Else
				_GUICtrlStatusBar_SetText($StatusBar,  "Хрень с кормом", 3)
			EndIf
EndFunc
Func _GetCurrentHook ()
		$HookFace = PixelChecksum($GamePos[0]+593, $GamePos[1]+688, $GamePos[0]+593+20, $GamePos[1]+688+20, 3, $MainHwnd)
			If Not @error Then
			
			$Serch = _ArraySearch($HookFaces, $HookFace )
				If @error Then
					IniWrite( $ConfigFile,"HookFaces", $HookFace, $HookFace)
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$HookFace, 2)
				Else
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$HookFaces[$Serch][1], 2)
				EndIf
			Else
				_GUICtrlStatusBar_SetText($StatusBar,  "Хрень с крюком", 3)
			EndIf
EndFunc
	
Func _GetCurrentDepth ()
		$DepthFace = PixelChecksum($GamePos[0]+622, $GamePos[1]+683, $GamePos[0]+622+10, $GamePos[1]+683+30, 3, $MainHwnd)
			If Not @error Then
			
			$Serch = _ArraySearch($DepthFaces, $DepthFace )
				If @error Then
					IniWrite( $ConfigFile,"DepthFaces", $DepthFace, $DepthFace)
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$DepthFace, 3)
				Else
					_GUICtrlStatusBar_SetText($StatusBar,  ""&$DepthFaces[$Serch][1], 3)
				EndIf
			Else
				_GUICtrlStatusBar_SetText($StatusBar,  "Хрень с Глубиной", 3)
			EndIf
EndFunc


У меня
$BaitFaces[40][40]
$FoodFaces[12][12]
$HookFaces[6][6]
$DepthFaces[6][9]

А еще будет
$LocationFaces[5202][5202] - приблизительно
$RodFaces[100][100]
$RodRemFaces[1000][1000]

Можно ли их все слить в один масив? Я боюсь, что будет очень долго искать.

Тут начал подумывать в сторону SQLite... что скажите?
 

marisab

Новичок
Сообщения
7
Репутация
1
TR.rar вот готовый....нужно сменить разрешение с 1440х900 на 1366х768 (ноутбуковское) и второе чтобы удочка сама ловила..реагировала...вытаскивала..продавала, как с донкой и спиннингом
 
Верх