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

Prosty klikacz


Rekomendowane odpowiedzi

Opublikowano

Witam, 

 

znam jakies tam podstawy programowania ale ogólnie jestem w tym zielony, napisałem sobie prostego kilkacza do gry przegladarkowej i pytanie jak ma wyglądać linijka zeby program nacisnał lewy ctrl i 2 jednoczesnie aby aktywować ustawienie w walce,pisząc taką linijke:

send("lctrl+2") 

wyskakuje mi na czacie w walce tekst "lctrl@" zamiast wybrania ustawienia walki

 

Pozdrawiam i licze na pomoc ;)

Opublikowano

Biorąc pod uwage co jest na tej stronie linijka powinna wygladać tak: 

Send("^(2)")

Ale to nie działa, troche przekombinowałem i działa a wyglada to tak:
 

Send("^2")

Dzieki za link ;) ale pewnie i tak jeszcze bede miał jakie problemy bo chce tam kilka funkcji wpisać,\

Pozdrawiam 

Opublikowano

Biorąc pod uwage co jest na tej stronie linijka powinna wygladać tak: 

Send("^(2)")

Ale to nie działa, troche przekombinowałem i działa a wyglada to tak:

 

Send("^2")

Dzieki za link ;) ale pewnie i tak jeszcze bede miał jakie problemy bo chce tam kilka funkcji wpisać,\

Pozdrawiam 

 

Tam nigdzie w instrukcji nie było pisania znaków w nawiasie zwykłym - co najwyżej w klamerkach - czytaj uważniej, nie będziesz musiał kombinować ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Być może, ale dałem rade :P Teraz kolejne pytanie a mianowicie jakiej pętli użyć, żeby szukanie piksela odbywało sie do skutku bo mam taki kod zeby szukalo jednego piksele i jak go znajdzie to zeby przystąpiło do szukania drugiego i trzeciego.

Func odp()
   $hp = PixelSearch(152, 147, 162, 163, 0xEB9E82)
   If Not @ Then
	  MouseMove($hp[0],$hp[1])
	  sleep(1000)
	  $mana = PixelSearch(150, 162, 163, 178, 0x88B0DC)
	  If Not @ Then
		 MouseMove($mana[0], $mana[1])
		 sleep(1000)
		 $konda = PixelSearch(153, 178, 163, 191, 0xB0E58D)
		 If Not @ Then
			MouseMove($konda[0], $konda[1])
			sleep(1000)
		 EndIf
          EndIf
   EndIf
Opublikowano

Pętle nieskończoną typu While 1?

Func odp()
While 1
   $hp = PixelSearch(152, 147, 162, 163, 0xEB9E82)
   If Not @ Then
	  MouseMove($hp[0],$hp[1])
	  sleep(1000)
	  $mana = PixelSearch(150, 162, 163, 178, 0x88B0DC)
	  If Not @ Then
		 MouseMove($mana[0], $mana[1])
		 sleep(1000)
		 $konda = PixelSearch(153, 178, 163, 191, 0xB0E58D)
		 If Not @ Then
			MouseMove($konda[0], $konda[1])
			sleep(1000)
		 EndIf
          EndIf
   EndIf
WEnd 
EndFunc ; Nie było tu tego ;P

Jak coś to pisz

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

  • 2 tygodnie później...
Opublikowano
Func odpoczynek()
   MouseMove(141, 218)
   MouseClick("left")

   sleep(1000)
    Do
	$hp = PixelSearch(152, 147, 162, 163, 0xEB9E82)
   Until Not @

	  MouseMove($hp[0],$hp[1])
	  sleep(1000)

	  Do
	  $mana = PixelSearch(150, 162, 163, 178, 0x88B0DC)
	  Until Not @
		 MouseMove($mana[0], $mana[1])
		 sleep(1000)

		 Do
		 $konda = PixelSearch(153, 178, 163, 191, 0xB0E58D)
		 Until Not @
			MouseMove($konda[0], $konda[1])
			sleep(1000)



   EndFunc

Tak to zrobiłem ostatecznie, działa tak jak chciałem a teraz pytanie czy da sie zrobic tak zeby np szukało 3 pikseli jednoczesnie tzn jednego, drugiego lub trzeciego i odpowiednio po znalezionym pikselu nr 1 wykona daną funkcję, lub gdzie znajdzie 2 piksel wykona inną funkcje. Mam nadzieje, że w miarę to zrozumiale wyjaśniłem ;)

Opublikowano

Wykorzystaj AdlibRegister 

AdlibRegister ("nazwafunkcji",czas co ile ma być wykonywana)

Wystarczy raz napisać tą funkcje. Co dany odstęp czasowy wykona jakieś zadanie ( w tym wypadku szukanie pixela)

Tysiące lat wojen, ani jednego dnia pokoju,

pytam czy to skończy się.

 

Zegarek BB

Opublikowano

Nie da się bo za duże obciążenie i wzajemnie by sie zakłócały funkcje szukania , wystarczy że będzie po kolei wykonywało każda funkcję 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Potwierdzam, przy krótkich funkcjach najlepiej wykonywać je jedna po drugiej - problem zaczyna się gdy chcemy w trakcie działania jednej długo trwającej funkcji wywołać drugą. Nie wiem jak timery i AdlibRegister w autoit, ale timer w ahk potrafił mi wysypać program. Zawsze można funkcje zapisać w osobnych skryptach i uruchomić na raz kilka procesów, lub kazać skryptowi głównemu uruchamiać procesy poboczne w określonych sytuacjach (taka proteza na brak wielowątkowości).

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Tak wyglada mój cały program, wyszukuje moba, walczy, odpoczywa i ogólnie jest wszystko ok, ale problem pojawia sie kiedy dana druzyna walczy z kims innym i wtedy oczekuje na pokazanie sie zegara gdzie się nie pokaze w przypadku juz zajetej druzyny, i pytanie jakiej pętli uzyc i jak zeby to działalo tak jak chce, nie wychodzi mi to, dopiero sie ucze także z góry sory :P

Start()


Func Start()
while 1
odpoczynek()
test ()
sleep(2000)
wend
EndFunc

Func test()
Sleep (2000)
$mob = PixelSearch(13, 569, 170, 720, 0xFFFFFF)
If Not @ Then
   MouseMove($mob[0], $mob[1])
   sleep(500)
   MouseClick("left")
   Do
	  $atak = PixelSearch( 705, 206, 752, 252, 0x786B82)
   Until not @

   MouseMove($atak[0],$atak[1])
   sleep(500)
   MouseClick("left")
   sleep(500)
   Do
	  $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
   Until not @

   send("^2")


   MouseMove($zegar[0],$zegar[1])
   MouseClick("left")
   sleep(888)
   send("^1")


  Do
	 MouseClick("left")
	 sleep(700)
	 $wyjscie = PixelSearch(925,563, 1005, 578, 0x402002)

   Until not @
  MouseMove($wyjscie[0],$wyjscie[1])
  MouseClick("left")

Endif
Endfunc

Func odpoczynek()
   MouseMove(141, 218)
   MouseClick("left")

   sleep(500)
    Do
	$hp = PixelSearch(152, 147, 162, 163, 0xEB9E82)
   Until Not @

	  MouseMove($hp[0],$hp[1])
	  sleep(500)

	  Do
	  $mana = PixelSearch(150, 162, 163, 178, 0x88B0DC)
	  Until Not @
		 MouseMove($mana[0], $mana[1])
		 sleep(500)

		 Do
		 $konda = PixelSearch(153, 178, 163, 191, 0xB0E58D)
		 Until Not @
			MouseMove($konda[0], $konda[1])
			sleep(500)



   EndFunc

Jak znajduje zmienną zegar w linijce 27-29 to wykonuje linijki 30-50 to ok, ale gdy te zmiennej nie ma program stoi i czeka, próbowałem petli if, for, while ale nie wychodziło mi to. Chce żeby program wyszukał kilka razy tej zmiennej np 3 razy z przerwą po 3s i jesli jej nie znajdzie ruszył od nowa zwyczajnie. Sory, że zawracam dupe ale a nóż się czegoś naucze :P 

 

Jak macie jakies wskazówki bądz uwagi słucham, nie boje sie krytyki :P

 

Z góry dzięki, mam nadzieje, że w miarę logicznie wytłumaczyłem o co mi chodzi, pozdrawiam 

Opublikowano

If to nie petla tylko warunek ;)

Mozesz uzyc poprostu petli While, przyda tez ci sie timer.

Do zmiennej przypisujesz start zegara,nastepnie otwierasz petle while 1,sprawdzasz czy znalazlo co chcesz, jezeli tak to zamykasz petle przez exitloop, jak nie znalazlo do dajesz kolejny warunek ktory sprawdza czy minelo juz 9s, jezeli minelo to tez zamykasz petle przez exitloop.

Tutaj masz opis funkcji do timera

http://www.mpcforum.pl/topic/259918-timersau3wielowtkowosc-autoit/

Opublikowano

Zapomniałeś o poleceniach ContinueLoop i ExitLoop - dzięki nim osiągniesz to co zamierzasz.
 
Rodzaj pętli nie ma znaczenia - wszystkie robią to samo, po prostu czasem jedna jest wygodniejsza, czasem druga.
 
Zachowując to co masz do tej pory przerobiłbym to następująco:
 
zamiast:

Do
    $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
Until not @

daj:

$i = 0
Do
    If $i = 3 Then ExitLoop
    $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
    Sleep(3000)
    $i += 1
Until not @

If @ Then ContinueLoop

Poza tym pakowanie głównej pętli w funkcję Start() jest całkiem niepotrzebne. Timer też nie potrzebny.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Hans, to co podałeś, nie działa mi, po znalezieniu zmiennej zegar program sie wylacza 

 Chyba, że ja coś zjebałem tak to umieściłem
 

Func test()
Sleep (2000)
$mob = PixelSearch(13, 569, 170, 720, 0xFFFFFF)
If Not @ Then
   MouseMove($mob[0], $mob[1])
   sleep(500)
   MouseClick("left")
   Do
	  $atak = PixelSearch( 705, 206, 752, 252, 0x786B82)
   Until not @

   MouseMove($atak[0],$atak[1])
   sleep(500)
   MouseClick("left")
   sleep(500)
  $i = 0
Do
    If $i = 3 Then
	   ExitLoop
	   If  $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e) not @ Then
		  send("^2")


   MouseMove($zegar[0],$zegar[1])
   MouseClick("left")
   sleep(888)
   send("^1")


  Do
	 MouseClick("left")
	 sleep(700)
	 $wyjscie = PixelSearch(925,563, 1005, 578, 0x402002)

   Until not @
  MouseMove($wyjscie[0],$wyjscie[1])
  MouseClick("left")
EndIf
    Sleep(2000)
    $i += 1
 ElseIf @ Then
	ContinueLoop
	EndIf
Until not @


Endif
Endfunc
Opublikowano

@szponek

Jak otwierasz if to go zamykasz(chyba ze jest w tej samej linii), tak samo z petla.

@2x up

No jasne, po co pozwalac pracowac programowi non stop zeby szybciej smigal, skoro mozna go zamrozic 3x po 3s.

 

@Edit

Dobra, masz wszystko pozamykane tylko to jest w taki sposob napisane ze oczopląsu idzie dostac.

Otwierasz petle, sprawdzasz ifa, dodajesz +1 zamykasz petle. Wielkiej filozofi tutaj nie ma.

To co miales zrobic w ~6 liniach rozwaliles po calym kodzie.

Opublikowano

@szponek

 

Namieszałeś - miałeś zastąpić jeden fragment drugim a Ty jakieś przetasowania zrobiłeś.

Jak słusznie IZZER4 pisze wcięcia masz tak porobione, że trzeba sobie samemu sformatować żeby coś zrozumieć - znacznik otwierający i zamykający muszą być na tym samym poziomie inaczej jest syf, podobnie wciecia - muszą mieć jednakowy skok. Jak ładnie sformatujesz to będzie łatwiej pomóc.

 

@IZZER4

 

Napisałem tak jak chciał autor - nie będę go uszczęśliwiał na siłę ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Zastąpiłem ten fragment ale musiałem endify wstawic i tak to jakos wyglada zeby sie wgl odpalił ale nie działa tak jak chce a to że wcięć nie robiłem bo nie zwracałem na to uwagi bo program nie jest jakiś super długi i ja mniej wiecej wiedziałem co i jak ale to ogarne i podeśle poprawione chyba, że w końcu dojde co jest nie tak ;)

 

dzięki za pomoc jak narazie, jeszcze się odezwe :P 

Opublikowano

Tak wygląda główna część tego programu uporządkowana żebyście mogli rozczytać 

Func test()
Sleep (2000)
$mob = PixelSearch(13, 569, 170, 720, 0xFFFFFF)
If Not @ Then
   MouseMove($mob[0], $mob[1])
   sleep(500)
   MouseClick("left")
	  Do
	     $atak = PixelSearch( 705, 206, 752, 252, 0x786B82)
	  Until not @
   MouseMove($atak[0],$atak[1])
   sleep(500)
   MouseClick("left")
Local $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
	  For $i=0 to 5
	  sleep(1000)
		 If $zegar not @ Then
			send("^2")
			MouseMove($zegar[0],$zegar[1])
			MouseClick("left")
			sleep(888)
			send("^1")
			   Do
				  MouseClick("left")
				  sleep(700)
				  $wyjscie = PixelSearch(925,563, 1005, 578, 0x402002)
			   Until not @
			MouseMove($wyjscie[0],$wyjscie[1])
			MouseClick("left")
		 Else
			ContinueLoop
		 EndIf
	  Next

EndIf


Endfunc

Wykonuje się 13 linijka i program znika mi z paska, w czym moze być problem? 

Opublikowano

Prawidłowo wcięty kod wygląda raczej tak:

Func test()
    Sleep (2000)
    $mob = PixelSearch(13, 569, 170, 720, 0xFFFFFF)
    If Not @ Then
        MouseMove($mob[0], $mob[1])
        sleep(500)
        MouseClick("left")
        Do
            $atak = PixelSearch(705, 206, 752, 252, 0x786B82)
        Until not @
        MouseMove($atak[0],$atak[1])
        sleep(500)
        MouseClick("left")
        Local $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
        For $i=0 to 5
            sleep(1000)
            If $zegar not @ Then
                send("^2")
                MouseMove($zegar[0],$zegar[1])
                MouseClick("left")
                sleep(888)
                send("^1")
                Do
                    MouseClick("left")
                    sleep(700)
                    $wyjscie = PixelSearch(925,563, 1005, 578, 0x402002)
                Until not @
                MouseMove($wyjscie[0],$wyjscie[1])
                MouseClick("left")
            Else
                ContinueLoop
            EndIf
        Next
    EndIf
Endfunc

Warunek wykonania pętli (linia 14) masz poza pętlą for wiec nie dziwne, że nie działa. Sprawdzasz zegar raz a potem w pętli 6 razy sprawdzasz czy się wynik nie zmienił (raczej nie mógł) :D

Być może błędów jest więcej, ale ten mi się pierwszy rzucił w oczy.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano
Func test()
    Sleep (2000)
    $mob = PixelSearch(13, 569, 170, 720, 0xFFFFFF)
    If Not @ Then
        MouseMove($mob[0], $mob[1])
        sleep(500)
        MouseClick("left")
        Do
            $atak = PixelSearch(705, 206, 752, 252, 0x786B82)
        Until not @
        MouseMove($atak[0],$atak[1])
        sleep(500)
        MouseClick("left")
        
        For $i=0 to 5
            sleep(1000)
            If $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)not @ Then
                send("^2")
                MouseMove($zegar[0],$zegar[1])
                MouseClick("left")
                sleep(888)
                send("^1")
                Do
                    MouseClick("left")
                    sleep(700)
                    $wyjscie = PixelSearch(925,563, 1005, 578, 0x402002)
                Until not @
                MouseMove($wyjscie[0],$wyjscie[1])
                MouseClick("left")
            Else
                ContinueLoop
            EndIf
        Next
    EndIf
Endfunc

Ani tamta wersja ani ta niczym sie nie różnią, ten sam efekt także coś innego musi być nie tak czego nie dostrzegam :P

Bo chodzi mi o to zeby poszukał danego pixela 5 razy z sekundowa przerwą i jesli go nie znajdzie to od nowa program

Opublikowano

Eh, tak nie powinieneś robić:

If $zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)not @ Then

Sprawdzasz warunek, więc jest inny kontekst i znak "=" znaczy co innego (porównanie zamiast przypisania wartości), najpierw przypisz, potem sprawdź czy nie ma błędu:

$zegar = PixelSearch(952,167, 1010, 215, 0xd35a1e)
If Not @ Then

No i jak chcesz powtarzać funkcję to ją całą też w pętlę wrzuć.

 

I wstawiaj sobie kontrolne MsgBox'y gdzie się da - wtedy będziesz wiedział gdzie masz błąd. Jak będzie wszystko działać to je usuniesz.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Poradziłem sobie okazało się że było coś nie tak z ifem na samej górze prawie i dlatego funkcja for nie startowała

 

A teraz jeszcze pytanie czy dałoby sie zrobic jakiego bota/klikacza nie koniecznie w autoicie a ze nie znam jezyków programowania to pytam jakim mozna to zrobic

Wchodząc na instancje grupki respią sie randomowo w instancji wiec pixelsearchem tu nie wiele zdziałam. Ruchy myszki też nie dadza rady tu  bo jak zrespi tam gdzie ma myszka kliknac to wyskakuje cos takiego:
http://screenshooter.net/102447405/wemsvag

 

generalnie instancja wygląda tak: 
http://screenshooter.net/102447405/trhyxht

http://screenshooter.net/102447405/mbdavmp
 

Jeśli ktoś zechce pomóc przy tym to się jakoś odwdzięczę :)

 

Dzięki i pozdrawiam

Opublikowano

Ogólnie jak coś pojawia się w różnych miejscach i trzeba to znaleźć to wygodnie jest użyć ImageSearch() -> http://www.mpcforum.pl/topic/100011-tut-image-search/

Można na tym oprzeć całego bota.

 

PS

Mógłbyś napisać co to w ogóle za gra, bo być może da się to zrobić zupełnie inaczej (może jest bezpośredni dostęp do obiektów gry).

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

To gra chyba na flashu, taern.pl  a z imagesearchem nie wypali bo moby respia w różnych miejscach i jest to animacja, moby sie ruszaja.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...