Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "FastFind.au3"
- #include <MsgBoxConstants.au3>
- #include <Array.au3>
- HotKeySet("{HOME}", "_START")
- HotKeySet("{END}", "_EXIT")
- Global $MARK_COLOR = '00FF4646' ; Kolor Znacznika
- Global $MINIMAP_AREA = [[1743, 31], [1911, 175]] ; Obszar minimapy
- Global $CENTER = [1825, 100] ; Srodek
- Func _START()
- Local $Marks = findMarks()
- Local $invalid_quarters = Null ; Numer wykluczonej cwiartki, na poczatku nie chcemy nic wykluczac
- While 1
- If IsInactive() Then
- $Marks = findMarks()
- $invalid_quarters = makeMove($Marks, $invalid_quarters)
- EndIf
- Sleep(100)
- WEnd
- EndFunc
- ; Zwraca posortowana liste znacznikow
- Func findMarks()
- Local $aMarks = [[0, 0, 0, 0]]
- FFSnapShot()
- For $x = $MINIMAP_AREA[0][0] To $MINIMAP_AREA[1][0]
- For $y = $MINIMAP_AREA[0][1] To $MINIMAP_AREA[1][1]
- If Hex(FFGetPixel($x,$y)) == $MARK_COLOR Then
- _ArrayAdd($aMarks, $x & "|" & $y & "|" & getQuarter($x, $y) & "|" & getDistance($x, $y))
- EndIf
- Next
- Next
- If UBound($aMarks) <= 1 Then
- MsgBox($MB_ICONERROR, '', 'Brak punktów na mapie')
- Exit
- EndIf
- _ArraySort($aMarks, 0, 0, 0, 3) ; sortowanie po dystansie
- ; COL 0 - X
- ; COL 1 - Y
- ; COL 2 - Cwiartka
- ; COL 3 - Odleglosc do punktu
- ;_ArrayDisplay($aMarks)
- Return $aMarks
- EndFunc
- ; Wyznacza cwiartke
- ; Bedzie problem jezeli x == 0 lub y == 0
- Func getQuarter($x, $y)
- $x = $x - $CENTER[0]
- $y = $y - $CENTER[1]
- If $x > 0 And $y < 0 Then
- Return 1
- ElseIf $x < 0 And $y < 0 Then
- Return 2
- ElseIf $x < 0 And $y > 0 Then
- Return 3
- ElseIf $x > 0 And $y > 0 Then
- Return 4
- EndIf
- EndFunc
- ; Dystans
- Func getDistance($x, $y)
- $x = Abs($x - $CENTER[0])
- $y = Abs($y - $CENTER[1])
- Return $x + $y
- EndFunc
- ; Wykonuje ruch i zwraca cwiartke ktora wykluczymy przy nastepnym ruchu
- Func makeMove($aMarks, $invalid_quarters)
- Local $gotoX = 0
- Local $gotoY = 0
- Local $quarter = 0
- For $i=1 To UBound($aMarks)-1
- $quarter = $aMarks[$i][2]
- If isInInvalidQuarter($quarter, $invalid_quarters) Then
- ContinueLoop
- EndIf
- $gotoX = $aMarks[$i][0]
- $gotoY = $aMarks[$i][1]
- ExitLoop
- Next
- If $gotoX > 0 And $gotoY > 0 Then
- MouseMove($gotoX, $gotoY, 0)
- Sleep(250)
- MouseClick("left")
- Return getInvalidQuarter($quarter)
- Else
- MsgBox($MB_ICONERROR, '', 'Nie udało się wykonać ruchu, wszystkie punkty są w wykluczonej cwiartce')
- Exit
- EndIf
- EndFunc
- ; Zwraca cwiartke ktora bedziemy ignorowac
- Func getInvalidQuarter($quarter)
- Switch ($quarter)
- Case 1
- Return 3
- Case 2
- Return 4
- Case 3
- Return 1
- Case 4
- Return 2
- Case Else
- MsgBox($MB_ICONERROR, '', "What's wrong dude?")
- EndSwitch
- EndFunc
- ; Zwraca True jezeli znacznik jest w wykluczonej cwiartce
- Func isInInvalidQuarter($quarter, $invalid_quarters)
- If IsArray($invalid_quarters) Then
- For $q In $invalid_quarters
- If $quarter == $q Then Return True
- Next
- Else
- Return $quarter == $invalid_quarters
- EndIf
- Return False
- EndFunc
- ; Zwraca True jezeli postac sie nie porusza
- Func IsInactive()
- Local $cheksum1 = PixelChecksum($MINIMAP_AREA[0][0], $MINIMAP_AREA[0][1], $MINIMAP_AREA[1][0], $MINIMAP_AREA[1][1])
- Sleep(1500)
- Local $cheksum2 = PixelChecksum($MINIMAP_AREA[0][0], $MINIMAP_AREA[0][1], $MINIMAP_AREA[1][0], $MINIMAP_AREA[1][1])
- Return $cheksum1 == $cheksum2
- EndFunc
- Func _EXIT()
- Exit
- EndFunc
- While 1
- Sleep(100)
- WEnd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement