# Ending Loop When found Pixel Color

## Recommended Posts

Hello i Have HP Bar in my game and it has 170px of width and then im gonna find start of this by mouse pos then i got \$hpStart[0] = 661  \$hpStart[1] = 230 ,  \$hpEnd[0] = 839

And there is from \$hpStart[0] = 661 the same color - 0xCB423B but depends of my points of hp for example on pixel  \$hpStart[0] = 745 would be another color not  0xCB423B and then i will know my my character got 50% of health points.

I encountered problem here - for loop still looping to 839 and not founding this change in color for example on pixel \$hpStart[0] = 745

I would know actual \$i counter and \$hpEnd[0] then only i can calculate current health percent value

```Func MouseCord()
\$MousePos = MouseGetPos()
global \$hpStart = \$MousePos
global \$hpEnd = \$hpStart
\$hpEnd[0] = \$hpEnd[0] + 170

For \$i = \$hpStart[0] To \$hpEnd[0] ; Looping from 661 to 839
\$pixel = PixelGetColor(\$i,\$hpStart[1])
If \$pixel <> 0xCB423B Then
\$hpNowPer = ( \$hpEnd[0] - \$i ) / 170
\$hpPoOdjeciu = 1 - \$hpNowPer
\$hpNowPercent = Round(\$hpPoOdjeciu,2)
ExitLoop ; - that not working
EndIf
Next
EndFunc```

##### Share on other sites

@Szmycu you come back after 24 hours off and immediately post again regarding a game. As you're obviously not interested in following the forum rules, we are not interested in your company.

√-1 2^3 ∑ π, and it was delicious!

##### Share on other sites
This topic is now closed to further replies.

• ### Similar Content

• By Jackized
Is there a way to loop back to the beginning and keep the already entered data in the GUI Input boxes? I can GUIDelete and start a new GUI but all the typed data has to be redone. Here is a sample.

#Include <GuiConstants.au3> Dim \$msg,\$okbutton,\$cancelbutton,\$objOU,\$intAccValue,\$strGroup1,\$strGroup2 Dim \$strFirstName,\$strLastName,\$strUserName,\$strUserName2,\$strPassword,\$strDescription,\$strContainer Dim \$Combo,\$Duration Do \$Form1 = GuiCreate("", 300, 300)          GUISetBkColor(0xA6CAF0)         GuiCtrlCreateLabel("First Name:", 50, 10)         \$strFirstName = GuiCtrlCreateInput("", 50, 25, 200, 20)         GUICtrlSetState ( \$okbutton, \$GUI_FOCUS )         GuiSetState()     \$okbutton = GUICtrlCreateButton ("OK",75,240,50,20)     \$cancelbutton = GUICtrlCreateButton ("Cancel",175,240,50,20) While 1     \$msg = GUIGetMsg()     Select     Case \$msg = \$GUI_EVENT_CLOSE Or \$msg = \$cancelbutton             Exit     Case \$msg = \$okbutton             \$strFirstName = GUICtrlRead(\$strFirstName)             ExitLoop     EndSelect Wend \$len = StringLen(\$strFirstName)     If \$len > "20" then         MsgBox(0, "ERROR Name to long", \$strFirstName & " can't be over 20 characters." & @CRLF & "Total: " & \$len)         ;Exit         GUIDelete(\$Form1)     EndIf Until \$len < "20" MsgBox(0, "Done", "")
• By mrtgtr
I want to do something , after wait 2 min and again do same thing
But I do do not want with sleep, it must be timer
How I do this ?
• By Skeletor
Hi Guys,
Is it possible to get a variable on your For..Next loop?

Local \$Lines1 = _FileCountLines(C:\temp\test.txt) Local \$linesToCount2 = \$Lines1 + 2 \$var = Number(\$linesToCount2) For \$count = 1 To _FileCountLines(\$FileRead2) Step 1 For \$i = \$var To \$count Next ;Code does stuff here Next Somehow my code doesn't work even though I thought I could convert the variable to a Integer / Number.
This code I posted above does not move to the next value.
But the code below does... why is that?
For \$count = 1 To _FileCountLines(\$FileRead2) Step 1 For \$i = 2 To \$count Next ;Code does stuff here Next
Why is the For loop resetting itself?
Is it because the program does not cache the variable and needs to keep on acquiring this variable each time?
If so , how would you make this variable static?

• By Pricehacker
Hello Autoit!
Today i discovered that pixelgetcolor doesn't adapt to the DPI of the system, and i want to fix this somehow as my laptop uses 120 DPI.
This is what i have came up with so far:
AutoItSetOption ( "CaretCoordMode" , 0) AutoItSetOption ( "MouseCoordMode" , 0) AutoItSetOption ( "PixelCoordMode" , 0) AutoItSetOption ( "GUICoordMode" , 0) #include <MsgBoxConstants.au3> #include <Misc.au3> #include <WinAPIGdi.au3> ; enum _PROCESS_DPI_AWARENESS Global Const \$PROCESS_DPI_UNAWARE = 0 Global Const \$PROCESS_SYSTEM_DPI_AWARE = 1 Global Const \$PROCESS_PER_MONITOR_DPI_AWARE = 2 ; enum _MONITOR_DPI_TYPE Global Const \$MDT_EFFECTIVE_DPI = 0 Global Const \$MDT_ANGULAR_DPI = 1 Global Const \$MDT_RAW_DPI = 2 Global Const \$MDT_DEFAULT = \$MDT_EFFECTIVE_DPI HotKeySet('{ESC}','Terminate') Func Terminate() Exit EndFunc \$iPD = 1 while 1 \$aPos = WinGetPos("[ACTIVE]") ToolTip (PixelGetColor( MouseGetPos()[0]*(96/_DPI(0)), MouseGetPos()[1]*(96/_DPI(1))) & ', ' & MouseGetPos()[0] & ', ' & MouseGetPos()[1] ) if \$iPD = 1 and Not _IsPressed(22) Then \$iPD = 0 Sleep(100) EndIf if \$iPD = 0 And _IsPressed(22) Then ;Page down is pressed ClipPut( 'PixelGetColor(\$aPos[2]' & '*' & MouseGetPos(0)/\$aPos[2] & ',' & '\$aPos[3]' & '*' & MouseGetPos(1)/\$aPos[3] & ')' & '=' & PixelGetColor( MouseGetPos()[0], MouseGetPos()[1])) \$iPD = 1 EndIf WEnd ;Functions Func _DPI(\$iCordinate) ;0 for x and 1 for y _WinAPI_SetProcessDpiAwareness(\$PROCESS_SYSTEM_DPI_AWARE) \$aMonitors = _WinAPI_EnumDisplayMonitors() \$aDPI = _WinAPI_GetDpiForMonitor(\$aMonitors[1][0], \$MDT_DEFAULT) Return \$aDPI[\$iCordinate] EndFunc Func _WinAPI_SetProcessDpiAwareness(\$DPIAware) DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", \$DPIAware) If @error Then Return SetError(1, 0, 0) EndFunc Func _WinAPI_GetDpiForMonitor(\$hMonitor, \$dpiType) Local \$X, \$Y \$aRet = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "long", \$hMonitor, "int", \$dpiType, "uint*", \$X, "uint*", \$Y) If @error Or Not IsArray(\$aRet) Then Return SetError(1, 0, 0) Local \$aDPI[2] = [\$aRet[3],\$aRet[4]] Return \$aDPI EndFunc
I'm pretty sure it has to do with me using the DPI in the wrong way as i dont really understand it (even after searching around on the internet for like an hour)
It would really help if anyone could help me on the right track
• By BogdanNicolescu
While 1 / / / A whole bunch of codes found in help and here: https://www.autoitscript.com/autoit3/docs/ / / / WEnd OR:

HotKeySet("{ESC}", "Terminate") While 1 MouseClick("Right",674,422) MouseClick("Left",673,447) Sleep(2000) / / / A whole bunch of codes found in help and here: https://www.autoitscript.com/autoit3/docs/ / / / MouseClick("Left",675,339) SLeep(3000) WEnd Func Terminate()     Exit 0 EndFunc
Sorry if i should't let this here to be found by newbies like me -.-'
×

• Wiki

• Back

• Git