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 ze skryptem


Rekomendowane odpowiedzi

Opublikowano

Na wstępie odrazu mówię, że działam z autoitem od dzisiaj więc prosze nie krzyczeć, że skrypt brzydki.

Otóż chodzi o to, że napisałem sobie kod do gry który automatycznie klika za mnie, lecz nie wiem z jakich przyczyn pomija on akcje mimo iż pixel znajduje się na ekranie.

While 1

    $pixel = PixelSearch(274, 834, 320, 864, 0x744D12)
MouseMove($pixel [0], $pixel [1], 1)
MouseClick($pixel)
Sleep(3000)

If IsArray (PixelSearch(404, 530, 767, 822, 0x6B6B8C)) Then
   Sleep(500)
$pixel2 = PixelSearch(404, 530, 767, 822, 0x6B6B8C)
MouseMove($pixel2 [0], $pixel2 [1], 1)
MouseClick($pixel2)
Sleep(3000)

$pixel3 = PixelSearch(540, 426, 1079, 620, 0x3293D5)
MouseMove($pixel3 [0], $pixel3 [1], 1)
MouseClick($pixel3)
Sleep(1500)

$pixel4 = PixelSearch(664, 389, 777, 551, 0x8E7E00)
MouseMove($pixel4 [0], $pixel4 [1], 1)
MouseClick($pixel4)
Sleep(1500)

EndIf

If Not (PixelSearch(404, 530, 767, 822, 0x6B6B8C)) Then
   Sleep(500)
$pixel = PixelSearch(274, 834, 320, 864, 0x744D12)
MouseMove($pixel [0], $pixel [1], 1)
MouseClick($pixel)
Sleep(3000)


EndIf

WEnd

Chodzi tu dokładnie o $pixel2, gdy odpale skrypt za 1 razem wykonuje czynność tak jak ma, podczas gdy pojawia sie znowu $pixel2 pomija go i klika na niego za kolejnym bądź kolejnym razem : | Wydaje mi się, że błąd może być po stronie pętli a ja nie mam pojęcia jak to naprawić. Prosiłbym o pomoc.

card.png
Opublikowano

Ogólnie dobrze by było wszystko umieścić w jednej instrukcji warunkowej, staraj się unikać przypadków jak ostatnie poszukiwanie (nowa instrukcja If Not może być zastąpiona przez Else, albo po prostu jako kolejny warunek, przeczący).

Skoro nie klika to musi być ku temu powód, stąd mnogość metod debugowania programu; każda funkcja zwraca wynik swojego działania, jeśli cos jej nie pykło, to ma w zwyczaju informować cię co jest nie tak, musisz jednak o to zapytać, najczęściej używając makra @error, w tym przypadku, jeżeli @error = 0 to znaczy, że funkcja zadziałała, jeśli @error = 1 - pixel nie został znaleziony.

Dodatkowo dobrze sprecyzowałeś warunek, ale można to zrobić prościej i z większą kontrolą nad skryptem, zamiast pytać czy wynik funkcji to tablica, zapytaj czy funkcja się wykonała prawidłowo.

No i na końcu drobna uwaga, nie musisz uzywać dwóch funkcji do kliknięcia, funkcja MouseClick() domyślnie przesuwa kursor nad element, stąd MouseMove() jest niepotrzebna.

$pixel2 = PixelSearch(404, 530, 767, 822, 0x6B6B8C)
If @error Then
	ConsoleWrite("Piksel nie został odnaleziony; Kod "& @error)
Else
	Sleep(500)
	MouseClick($MOUSE_CLICK_PRIMARY, $pixel2[0], $pixel2[1], 1)
	Sleep(3000)
EndIf

;instrukcje warunkowe mogą zostać zagnieżdżone
	

 

sygna.png

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...