Jump to content

anejoblanco

Members
  • Posts

    6
  • Joined

  • Last visited

anejoblanco's Achievements

Seeker

Seeker (1/7)

0

Reputation

  1. PixelSearch outputs a two element array of where the designated colour was found, in this instance $coOrd[0] being x and $coOrd[1] being y These variables can be used in place of putting a specific X and Y coordinate in the MouseClick command, the outcome being the script will perform a left mouse click where the colour was found Also that script will run an error, here's a minor correction $CoOrd = PixelSearch(30, 30,1024, 768, 0xff0000) ; Looks for colour 0xff0000. If Not @error Then ;If it exists then MouseClick("Left", $CoOrd[0], $CoOrd[1], 1, 0) ;Clicks the first instance of that colour else MsgBox(0,"!","Could not find colur") EndIf
  2. I have found the following code for finding the closest coords, I'm just not sure where to implement a MouseClick or even if this would work, but then I don't see why it wouldn't but I could just be being a n00b After some time it ends with this error (32) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: Dim $output[$Array[0][0]+1] Dim $output[^ ERROR >Exit code: 1 Time: 83.314 ;Declare Variables $atk = 0 Global $coord5 ;ToolTop Displaying function keys 0x8C8A8C Tooltip("HOME = On/Off END = Exit", 0, 0) ;List of command keys If Not WinActive("Soma Mythological Biography", "") Then WinActivate("Soma Mythological Biography", "") HotKeySet("{HOME}", "atkBrics") HotKeySet("{END}", "exitNow") WinWaitActive("Soma Mythological Biography", "") ;Scan range loops While True If $atk = 1 Then _SearchClick(320,264,482,368,0x6B5142,5) If $atk = 1 Then _SearchClick(239,193,556,448,0x6B5142,5) If $atk = 1 Then _SearchClick(144,128,645,456,0x6B5142,5) If $atk = 1 Then _SearchClick(56,63,757,525,0x6B5142,5) If $atk = 1 Then _SearchClick(3,23,779,548,0x6B5142,5) WEnd Func _SearchClick($a, $b, $c, $d, $e, $f) $coord5 = PixelSearch($a,$b,$c,$d,$e,$f) If NOT @error Then Call("_Closest");MouseClick("left",$coord5[0],$coord5[1],1,0) I have ommited this line for the time being as I want the MouseClick to occur after finding the closest coords EndIf EndFunc Func _Closest($Array = $coord5,$XCenter = 329,$YCenter = 402) Dim $output[$Array[0][0]+1] $output[0] = $Array[0][0] For $i = 1 to $Array[0][0] $output[$i] = Round(Sqrt(($Array[$i][0]-$XCenter)^2+($Array[$i][1]-$YCenter)^2),2) Next $t = 0 $s = $output[1] For $i = 1 to $output[0] If $output[$i] < $s Then $s = $output[$i] $t = $i EndIf Next Dim $output[2] $output[0] = $Array[$t][0] $output[1] = $Array[$t][1] Return $output EndFunc ;Functions ;On/Off atkBrics(): Func atkBrics() If $atk = 0 Then $atk = 1 Tooltip("Auto attacking Brics (HOME to disable)", 0, 0) Else $atk = 0 Tooltip("Home = On/Off END = Exit", 0, 0) EndIf EndFunc ;Exit Func exitNow() Exit EndFunc Is it possible to have the script perform a pixel search on the active window, then put the co-ords of the foun pixels through pythags theorem and have that output these co-ords with their relative distances into a table or array, that could store perhaps 8-12 lines of co-ords and relative distance (that could be updated constantly) then have the script use this information to perform a MouseClick at the co-ords with the lowest relative distance?
  3. Thats what i'm trying to do, got a feeling I have to put something between these If $atk = 1 Then _SearchClick(320,264,482,368,0x6B5142) If $atk = 1 Then _SearchClick(239,193,556,448,0x6B5142) If $atk = 1 Then _SearchClick(144,128,645,456,0x6B5142) If $atk = 1 Then _SearchClick(56,63,757,525,0x6B5142,5) If $atk = 1 Then _SearchClick(3,23,779,548,0x6B5142,5) It's just a matter of finding the appropriate commands at the moment
  4. It would seem that I am in the same situation as before, where the mouse is jumping around all possible pixels within the specified range constantly, what I need to do is get it to scan in an increasing area, then failing to find anything begin the scan from the smallest area and work it's way back up. Secondly I need it to prioritise clicking the pixel in the smallest scan area before then scanning again from the smallest area back up to the largest area. Perhaps I should note that this game is 2D/Isometric
  5. Thank you very much, that has done the trick, the mouse tends to fidgit about a lot but I can't complain if it means I don't have to sit at my computer clicking the same thing over and over
  6. Hello, new to this forum and AutoIt, this is my first attempt at creating a script in order to perform the role of a rather monotonous task. After much trial and error I have nearly succeeded in completing this 'bot', I am at the point where the script will search for a pixel colour and click on that pixel repetedly in order to defeat the target. My intention was to perform a PixelSearch in multiple ranges, the idea being that I could prioritise targets closer to me and attack only them, as opposed to the cursor randomly clicking every pixel it found of a paticular colour as it did when I first started making this script today. So far this appears to work, however I encountered another problem, being that the script was only attacking things when they came close to me, so I divided all the PixelSearch into their own loops, and if the desired pixel wasn't found to move onto the next loop (or rather increase the scan range). Now my problem is as far as I know that once this script has run once it does not run again, the result being that I attack a target only once, and it seems since I introduced the loops that it often will not attack at all, although I suspect this might be because PixelSearch isn't scanning as often as is therefore missing my defined colour. As I am typing this I have thought of another question which could invalidate all my work so far, the way I have set these loops up, am I correct in saying that if PixelSearch found pixels at a greater distance from me, is it just as likely to click on those pixels or will it click on the one's closest to me first (or rather the one's within the smallest given range) The question I originally started this topic for was ... is it possible to create an infinite loop that will run the 5 other loops. With the purpose of this script being able to run, doing what I intended it to do for an indefinate amount of time? My apologies if I have rambled but I have not slept in 40 hours. Many thanks in advance. ; Declare Variables $atk = 0 ; ToolTip displaying function keys Tooltip("HOME = On/Off END = Exit", 0, 0) ; List of command keys If Not WinActive("Soma Mythological Biography", "") Then WinActivate("Soma Mythological Biography", "") HotKeySet("{HOME}", "atkBrics") HotKeySet("{END}", "exitNow") WinWaitActive("Soma Mythological Biography", "") ; Scan range loops While True If $atk = 1 Then $coord1 = PixelSearch(320,264,482,368,0x6B5142,5) If NOT @error Then MouseClick("left", $coord1[0], $coord1[1], 1, 0) Sleep(50) If $coord1 = @error Then ExitLoop EndIf EndIf WEnd While True If $atk = 1 Then $coord2 = PixelSearch(239,193,556,448,0x6B5142,5) If NOT @error Then MouseClick("left", $coord2[0], $coord2[1], 1, 0) Sleep(50) If $coord2 = @error Then ExitLoop EndIf EndIf WEnd While True If $atk=1 Then $coord3 = PixelSearch(144,128,645,456,0x6B5142,5) If NOT @error Then MouseClick("left", $coord3[0], $coord3[1], 1, 0) Sleep(50) If $coord3 = @error Then ExitLoop EndIf EndIf WEnd While True If $atk = 1 Then $coord4 = PixelSearch(56,63,757,525,0x6B5142,5) If NOT @error Then MouseClick("left", $coord4[0], $coord4[1], 1, 0) Sleep(50) If $coord4 = @error Then ExitLoop EndIf EndIf WEnd While True If $atk = 1 Then $coord5 = PixelSearch(3,23,779,548,0x6B5142,5) If NOT @error Then MouseClick("left", $coord5[0], $coord5[1], 1, 0) Sleep(50) If $coord5 = @error Then ExitLoop EndIf EndIf WEnd ; Functions ; On/Off atkBrics(): Func atkBrics() If $atk = 0 Then $atk = 1 Tooltip("Auto attacking Brics (HOME to disable)", 0, 0) Else $atk = 0 Tooltip("HOME = On/Off END = Exit", 0, 0) EndIf EndFunc ; Exit Func exitNow() Exit EndFunc
×
×
  • Create New...