Что нового

FullCargoCheck Модуль

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Lyuk сказал(а):
Сделал модуль возвращающий долю (процент) загруженности трюма:

Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;функция v 0.4 проверки заполненности трюма, возвращает долю заполненности
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;~ $CargoX = $WinPos[0] + 40; Координата X верхнего левого угла окна трюма
;~ $CargoY = $WinPos[1] + 205; Координата Y верхнего левого угла окна трюма
Func FullCargoCheck()
    Local $Pr = 0, $RGB = 0, $R = 0, $G = 0, $B = 0, $dX = 3, $Grad = 0, $L = 100 ; длина полной полоски в пикселях
    Do
        $RGB = Hex(PixelGetColor($CargoX + 147 + $dX, $CargoY + 60)), 6) ;здесь указываются координаты начала полоски заполненности трюма
        $R = Dec(StringLeft($RGB, 2))
        $G = Dec(StringMid($RGB, 3, 2))
        $B = Dec(StringRight($RGB, 2))
        $Grad = Sqrt(($R ^ 2) + ($G ^ 2) + ($B ^ 2))
        $Pr = ($dX - 3) / $L
        $dX = $dX + ($L / 10)
    Until $Grad < 110 ;числом регулируется чувствительность к оттенкам черного
    TT($Pr * 100 & "% трюма заполнено")
    Return $Pr
EndFunc ;==>FullCargoCheck
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: FullCargoCheck

Шикарно, вот одна из наших первыx вариаций возвращающих число в процентах:
Код:
Func _WinGetMyCargoStatus()
    Dim $MyCargoLeftTopX = 775, $MyCargoLeftTopY = 591, _
    $CargoStatusBarLTX = $MyCargoLeftTopX + 127, $CargoStatusBarLTY = $MyCargoLeftTopY + 61, $CargoStatusBarRBX = $CargoStatusBarLTX + 98, $CargoStatusBarRBY = $CargoStatusBarLTY + 4, _
    $CargoStatusBarCol = 0x010E12, $CargoStatusBarShade = 5
    $FullCargoStatusBar = PixelSearch($CargoStatusBarLTX, $CargoStatusBarLTY, $CargoStatusBarRBX, $CargoStatusBarRBY, $CargoStatusBarCol, $CargoStatusBarShade)
    If @error Then
        Return 100
    Else
        $FullCargoPercent = Round((($FullCargoStatusBar[0] - $CargoStatusBarLTX) * 100 / 99),0)
        Return $FullCargoPercent
    EndIf
EndFunc

P.s. Наш вариант попроще Smile
 

insigonet

Новичок
Сообщения
1
Репутация
2
Я проверяю так, может пригодится или поправите меня

CargoStatus(800, 147, 897, 147, 0x005067, 10))
800 - это начало поиска с лева и на право 897
124 - это отступ сверху


Код:
ToolTip ("Количество процентов " , 40 ,43 , CargoStatus(800, 147, 897, 147, 0x005067, 60))
Sleep (3000)


Func CargoStatus($left, $top, $right, $bottom, $color, $variation)
	Local $a=$left
	While $a <= $right
		$CargoStatus = PixelSearch($a, $top, $a, $bottom, $color, $variation)
		If @error Then
			Return Int((($a-$left)*100)/($right-$left))
		Else
			$a=$a+1
		EndIf
	WEnd
	Return 100
EndFunc
 

Jonik Silver

Знающий
Сообщения
19
Репутация
11
Сам пока придумал вот что:

Код:
Func CargoCheck($WinTitle, $AxisX, $Start, $End)
;возвращает коэффициент загрузки трюма
	Dim $return
	Dim $indicator = 0x14647B
	Dim $Temp
	WinActivate($WinTitle)
	$Temp = PixelSearch($End,$AxisX, $Start,$AxisX, $indicator, 10)
	If @error Then
		$return = 0
	Else
		$return = Round(($Temp[0]-$Start)/($End-$Start), 2)
	EndIf
Return $return	
EndFunc


Работает в версии 3.3.6.1. Механизм основан на том, что в PixelSearch можно задать направление поиска в зависимости от порядка подстановки в функцию заданных координат. Соответственно для поиска используем линию пикселей на индикаторе загрузки трюма где $AxisX ось этой линии, началом поиска задаем конец индикатора, чтобы поиск шел справа на лево.
 
Верх