Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z AutoClick - AutoIT3


Rekomendowane odpowiedzi

Opublikowano

Witam ostatnio postanowiłem napisać mini bota do gry dla mnie i moich kumpli.

Zmagam się z pewnym błędem a mianowicie:

oznaczam pozycję gdzie myszka ma ruszyć się i kliknąć, a idzie w zupełnie inną stronę.

Próbowałem już pisać kilka razy od nowa, nawet zarwałem dziś nockę (o 5 dopiero spać poszedłem) i nic  z tego.

Oto kod:

 

 

 

;Includy
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
 
;Locale
local $x, $y, $x2, $y2, $x3, $y3
local $x4, $y4, $x5, $y5, $x6, $y6
local $speed, $i
 
;Konfingi
$Czekaj = 0
$Form1 = GUICreate("MargoPlayHard", 258, 507, 592, 124)
$speed = GUICtrlCreateInput("", 190, 45, 30, 21)
GUISetState(@SW_SHOW)
 
;HotKeye
HotKeySet("{F9}", "PobranieKordow")
HotKeySet("{F2}", "ListaKordow")
HotKeySet("{F3}", "Klikanie")
HotKeySet("{F4}", "Zamknij")
HotKeySet("{F8}", "PobranieKordow1")
 
;Funkcje
Func PobranieKordow()
   $x = ClipPut(MouseGetPos(0))
   $y = ClipPut(MouseGetPos(1))
EndFunc
 
Func PobranieKordow1()
   $x1 = ClipPut(MouseGetPos(0))
   $y1 = ClipPut(MouseGetPos(1))
EndFunc
 
Func ListaKordow()
   $x = ClipGet()
   $y = ClipGet()
   MsgBox(0, "Kordy:", $x & ", " & $y)
EndFunc
 
Func Klikanie()
While 2
   $x = ClipGet()
   $y = ClipGet()
   MouseClick("", $x,$y)
   Sleep(2000)
WEnd
EndFunc
 
Func Zamknij()
   Exit
EndFunc
 
;Pętle
While 1
   Sleep(100)
WEnd

Opublikowano
  1. Biblioteka Misc.au3 nie jest ci potrzebna, wywal ją
  2. Zmienna(np. $x) to takie miejsce w pamięci, pozwalające przechowywać jakieś dane - np liczbę. Używaj zmiennych a nie ClipPut i ClipGet.
  3. Wywal funkcję PobranieKordow1, jako że robi ona to samo co PobranieKordow
  4. To samo zrób z hotkey'em na F8

Poprawnie napisana funkcja na pobieranie koordynatów:

Func PobranieKordow()
   $x = MouseGetPos(0)
   $y = MouseGetPos(1)
EndFunc

Poprawnie napisana funkcja na wyświetlanie koordynatów:

Func ListaKordow()
   MsgBox(0, "Kordy:", $x & ", " & $y)
EndFunc

Poprawnie napisana funkcja na klikanie(klika w nieskończoność, tak samo jak twoja):

Func Klikanie()
While True
   MouseClick("primary", $x,$y)
   Sleep(2000)
WEnd
EndFunc

Reszta jest OK.

Opublikowano

Funkcja;

MouseClick("primary", $x,$y)

x/y to miejsce gdzie ma kliknac.Do pobraniach takich parametrow jest program wgrany razem z autoit(autoit window info)

Opublikowano

Dzięki :)

A jeśli chciałbym dodać wiele punktów gdzie myszka ma wędrować to jak to?

Zrób tablicę. Tablica to zbiór zmiennych. Deklaruje się ją tak:

$punktyx[20]

Oznacza to że stworzymy tablicę $punktyx z 20 elementami.

Numeracja miejsc zaczyna się od zera, a dostęp do kolejnych elementów wygląda tak:

tablica[0] = 123
tablica[1] = "lol"
tablica[3] = MouseGetPos(0)
; ...
MsgBox(0,"TABLICA", $tablica[18])
Tooltip($tablica[19])

Ale jest nawet lepiej. Jeśli dodasz Array.au3 i utworzysz tablicę 0-elementową to możesz zwiększać jej rozmiar o kolejny element za pomocą _ArrayAdd. Przykład użycia:

Global $punktyx[0]
Global $punktyy[0]

Func PobierzKordy()
_ArrayAdd($punktyx, MouseGetPos(0))
_ArrayAdd($punktyy, MouseGetPos(1))
EndFunc

Potem musimy to obsłużyć. Z pomocą przychodzi nam funkcja UBound, która zwraca ilość elementów tablicy. W ten sposób możemy użyć pętli for i po prostu klikać po kolei, a w razie potrzeby dodawać kolejne punkty.

Opublikowano

Przykładowy kod z użyciem tablic(i objaśnieniem):

$tablica[10]
$innatablica[5] = ["napis", 123, 0x46FA, "prawie koniec", "koniec"]
$licznik

MsgBox(0,"Test UBounda", UBound($tablica))

For $licznik = 0 To UBound($innatablica)
MsgBox(0,"Wykonanie " & $licznik, $innatablica[$licznik]
Next

Na początku deklarujemy tablicę(zbiór zmiennych) $tablica z 10 elementami.

Potem deklarujemy tablicę $innatablica z 5 elementami i ustalamy wartości tych elementów.

Potem deklarujemy zmienną $licznik.

Wyświetlamy okienko, w którym będzie wyświetlona liczba elementów tablicy $tablica.

Pętla for: najpierw ustalamy wartość $licznika na 0. Co każde wykonanie pętli jego wartość będzie się zwiększać o 1, dopóki nie będzie równa ilości elementów tablicy $innatablica. Krótko mówiąc - wykona się tyle razy, ile elementów na $innatablica a $licznik będzie nam mówił, które to wykonanie petli.

W pętli wyświetlamy wiadomość która będzie nam wypisywała po kolei elementy tablicy $innatablica. Czyli w pierwszym wykonaniu będzie napis, w drugim 123, w trzecim 0x46FA itd..

Słowo Next znaczy że to koniec pętli.

 

Jak to(i to co napisałem wcześniej) przełożyć na twój program?

Na samym początku dodajemy Array.au3.

#include <Array.au3>

Zastępujemy wszystkie zmienne $x i $y dwoma pustymi tablicami:

Global $x[0]
Global $y[0]

Pobieranie koordynatów teraz wygląda tak:

Func PobierzKordy()
_ArrayAdd($x, MouseGetPos(0))
_ArrayAdd($y, MouseGetPos(1))
EndFunc

Czyli gdy klikniemy, to do naszych tablic z koordynatami doda obecną pozycję myszki.

Wyświetlanie też trzeba przerobić:

Func Wyswietl()
Local $licznik
For $licznik = 0 To UBound($x)
MsgBox(0,"LISTA KLIKNIEC", $x[$licznik2] & " " & $y[$licznik2])
Next

Czyli:

  • Tworzymy zmienną $licznik
  • Ustawiamy ją na 0, i każemy wykonywać pętle tyle razy ile jest elementów w tablicy $x
  • Wyświetlamy kolejne wartości $x i $y

I na końcu klikanie:

Func Klikaj()
Local $licznik
For $licznik = 0 To UBound($x)
MouseClick("primary", $x[$licznik], $y[$licznik])
Next

Czyli:

  • Tworzymy zmienną $licznik
  • Ustawiamy ją na 0, i każemy wykonywać pętle tyle razy ile jest elementów w tablicy $x
  • Klikamy w kolejne miejsca
Opublikowano

 

Przykładowy kod z użyciem tablic(i objaśnieniem):

$tablica[10]
$innatablica[5] = ["napis", 123, 0x46FA, "prawie koniec", "koniec"]
$licznik

MsgBox(0,"Test UBounda", UBound($tablica))

For $licznik = 0 To UBound($innatablica)
MsgBox(0,"Wykonanie " & $licznik, $innatablica[$licznik]
Next

Na początku deklarujemy tablicę(zbiór zmiennych) $tablica z 10 elementami.

Potem deklarujemy tablicę $innatablica z 5 elementami i ustalamy wartości tych elementów.

Potem deklarujemy zmienną $licznik.

Wyświetlamy okienko, w którym będzie wyświetlona liczba elementów tablicy $tablica.

Pętla for: najpierw ustalamy wartość $licznika na 0. Co każde wykonanie pętli jego wartość będzie się zwiększać o 1, dopóki nie będzie równa ilości elementów tablicy $innatablica. Krótko mówiąc - wykona się tyle razy, ile elementów na $innatablica a $licznik będzie nam mówił, które to wykonanie petli.

W pętli wyświetlamy wiadomość która będzie nam wypisywała po kolei elementy tablicy $innatablica. Czyli w pierwszym wykonaniu będzie napis, w drugim 123, w trzecim 0x46FA itd..

Słowo Next znaczy że to koniec pętli.

 

Jak to(i to co napisałem wcześniej) przełożyć na twój program?

Na samym początku dodajemy Array.au3.

#include <Array.au3>

Zastępujemy wszystkie zmienne $x i $y dwoma pustymi tablicami:

Global $x[0]
Global $y[0]

Pobieranie koordynatów teraz wygląda tak:

Func PobierzKordy()
_ArrayAdd($x, MouseGetPos(0))
_ArrayAdd($y, MouseGetPos(1))
EndFunc

Czyli gdy klikniemy, to do naszych tablic z koordynatami doda obecną pozycję myszki.

Wyświetlanie też trzeba przerobić:

Func Wyswietl()
Local $licznik
For $licznik = 0 To UBound($x)
MsgBox(0,"LISTA KLIKNIEC", $x[$licznik2] & " " & $y[$licznik2])
Next

Czyli:

  • Tworzymy zmienną $licznik
  • Ustawiamy ją na 0, i każemy wykonywać pętle tyle razy ile jest elementów w tablicy $x
  • Wyświetlamy kolejne wartości $x i $y

I na końcu klikanie:

Func Klikaj()
Local $licznik
For $licznik = 0 To UBound($x)
MouseClick("primary", $x[$licznik], $y[$licznik])
Next

Czyli:

  • Tworzymy zmienną $licznik
  • Ustawiamy ją na 0, i każemy wykonywać pętle tyle razy ile jest elementów w tablicy $x
  • Klikamy w kolejne miejsca

 

Nie chce nic mowic ale Ubound zwraca ilosc komorek, a nie numer ostatniej komorki :)

Przykladowy kod powinien wygladac tak;

Func Klikaj()
Local $licznik
For $licznik = 0 To UBound($x) - 1
MouseClick("primary", $x[$licznik], $y[$licznik])
Next

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...