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
  • 0

Pomoc w zwiększaniu zmiennej o 1 gdy znajdzie pixel


fredziukus12

Pytanie

Opublikowano

Witam chciał bym napisać skrypt który po znaleźieniu pixela zwiększa wartość zmiennej o 1 

jak do tej porty napisałem coś takiego :C ale niestety nie działa po mojej myśli a ja nie wiem jak powiedzieć programowi

"Gdy znajdziesz pixel czerwony  $i zwiększ o 1 i zapisz jej wartość " niestety on nawet nie wykonuje ruchu mimo tego 

że zmienna  w pewnym momęcie ma wartość 6 proszę o pomoc 

 

 

#include <MsgBoxConstants.au3>

While 1
    $zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)
    If IsArray($zmienna) = True Then
        For $i = 0 To 6 Step 1
            MsgBox($MB_SYSTEMMODAL, "", "znaleziono pixel red" & @CRLF & $i)
        Next
        MsgBox($MB_SYSTEMMODAL, "", "był juz 6 razy")
    EndIf
WEnd
If $i=6 Then
    MouseMove (0,0,1)
EndIf

 

16 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Nic  nie robisz poza sprawdzaniem tej samej pozycji $zmienna  6x , by szukało w innym miejscu należy DODAĆ do odpowiedniego koordynatu  przesunięcie  o np +1 czy +10 pixeli 

 

Nie chce mi sie rozpisywać, mniej więcej to wygląda tak : 

 

$zmienna = $zmienna +10 

Np zmienna 10 zmienia się 

1 raz ma 10 

2 raz  ma 20

3 ma 30 

4 ma 40

5 ma 50

6 ma 60

jak masz tablicę to do każdej zmiennej którą potrzebujesz masz dodać tyle ma sie przesunąć. 

 

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

Opublikowano

@Ktosiu

 

Edytowałem kod w ten sposób 

 

While 1
    $zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)
    If IsArray($zmienna) = True Then
        $zmienna = $zmienna + 1
    EndIf
WEnd
If IsArray($zmienna) = 6 Then
    MouseMove (0,0,1)
EndIf

 

Ten drugi if się nie wykonuję ;/ chodziło mi o to aby ktoś wytumaczył mi jak zrobić taką funkcję 

żeby było to coś w stylu licznika że program liczy ile razy pojawił się kolor czerwony a jeśli pojawi się zielony to zaczyna liczyć od nowa

jeżeli licznik osiągnie wartość 6 ma wykonac prosty ruch myszą testowo. Nie wykonuje tego ruchu 

Albo jestem za głupi żeby zrozumieć jak napisać taki skrypt albo sam już nie wiem miło było by gdybyś pokierował mnie w jaki kolwiek sposób.

Opublikowano
$kolor = 0
While 1

$zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)

If not $zmienna = 0 Then ; Jeśli ZNAJDZIE KOLOR zawarty w $zmienna
$kolor = $kolor + 1

If $kolor = 6 Then
MouseMove (0,0,1)
ExitLoop
EndIf
    EndIf

WEnd

Msgbox(64,"","Koniec programu")

Jeśli nie o to chodzi, wytłumacz bardzo dokładnie o co chodzi jeszcze raz.

Opublikowano
31 minut temu, m4rcin93 napisał:

$kolor = 0
While 1

$zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)

If not $zmienna = 0 Then ; Jeśli ZNAJDZIE KOLOR zawarty w $zmienna
$kolor = $kolor + 1

If $kolor = 6 Then
MouseMove (0,0,1)
ExitLoop
EndIf
    EndIf

WEnd

Msgbox(64,"","Koniec programu")

Jeśli nie o to chodzi, wytłumacz bardzo dokładnie o co chodzi jeszcze raz.

Niestety nie wyszukuje mi tego pixela coś z fukcja pixelsearch jest nie tak :/ Chodzi mi o to że gdy funkcja pixelsearch znajdzie ten pixel 

ma policzyć że widziała go raz, po tym czeka aż pojawi on się znowu trwa to około 20 sekund, gdy pojawi się czerwony znowy zwiększa w tym

przypadku zmienną kolor o 1 ale jeśli pojawi się kolor zielony ma nadać zmiennej kolor wartość 0 niestety napotkałem na błąd który mówi mi że nie mogę deklarować tej samej zmiennej dwa razy i tu jest właśnie ten pies pogrzebany, program nie może się zakończyć ma działać cały czas w pętli 

gdy wartość zmiennej kolor wyniesie wartość = 6 program ma wykonać złożone czynności kliknięć i przesunięć myszą oraz nacisnąć klawisze. 

gdybyś czegoś jeszcze potrzebował to napisz 

 

dziś w szkolę znalazłem to 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

 

nie wiem czy to może w czymś pomóc ale jeśli zadziała i będzie w stanie doliczyć do 6 i wyżej a gdy warunek nie 

będzie prawdziwy to wyzeruję zmienną to jak najbardziej się przyda 

Opublikowano

Odpal program Autoit Window Info, przejdź do zakładki Mouse. Weź celownik i najedź na poszukiwany piksel. Zapisz pozycję i kolor, tam Ci się pojawi i napisz tutaj.

Dla koloru czerwonego i dla koloru zielonego to zrób.

 

Może złe koordynaty wziąłes do funkcji PixelSearch(158, 738,194, 765,0x9EC6E5) i nie wykrywa pixela.

Opublikowano
1 minutę temu, m4rcin93 napisał:

Odpal program Autoit Window Info, przejdź do zakładki Mouse. Weź celownik i najedź na poszukiwany piksel. Zapisz pozycję i kolor, tam Ci się pojawi i napisz tutaj.

Dla koloru czerwonego i dla koloru zielonego to zrób.

 

187, 751 0x0E6FBF kolor zielony 

161, 746 0x87B8DF kolor czerwony 

Opublikowano

$zielony = 0
$czerwony = 0
$kolor = 0

While 1
	$kolor_zielony = PixelSearch(187,751,200,770,0x0E6FBF)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf

	$kolor_czerwony = PixelSearch(161,746,180,760,0x87B8DF)
	If not @error Then
		$kolor = $czerwony + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf

	If $kolor = 6 Then
		ExitLoop
		EndIf
WEnd

MsgBox(64,"","KONIEC PROGRAMU!")

Edytowane.

Opublikowano

Edytowałem post, sprawdź jeszcze raz.

 


$zielony = 0
$czerwony = 0
$kolor = 0

While 1
	$kolor_zielony = PixelSearch(187,751,200,770,0x0E6FBF)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf

	$kolor_czerwony = PixelSearch(161,746,180,760,0x87B8DF)
	If not @error Then
		$kolor = $czerwony + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf

	If $kolor = 6 Then
		ExitLoop
		EndIf
WEnd

MsgBox(64,"","KONIEC PROGRAMU!")

 

Opublikowano

Kolejny problem z jakim się spotkałem to niestety podczas gdy pojawi się kolor z wartosci 0 robi sie wartosc 1 ale gdy znowu pojawi sie kolor wartosc powinna wynosic 2 a dalej wynosi 1 czyli zostaje przy punkcie wyjscia program nigdy nie dojdzie do wartosci 6 gdy nie potrafi liczyc :/ masz moze pomysl jak to zrobić ? 

 

próbowałem użyć tego 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

edytowałem kod niestety bezskutecznie wyskakuje mi bład a po sprawdzeniu tego na internecie oznacza to ze jest gożej niż źle to zrobione 

 

Opublikowano
$kolor = $czerwony + 1

Zmień na:
 

$kolor = $kolor + 1

 

Cytat

próbowałem użyć tego 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

edytowałem kod niestety bezskutecznie wyskakuje mi bład a po sprawdzeniu tego na internecie oznacza to ze jest gożej niż źle to zrobione 

$a=1 $x=IsInt($a)  - zwróci 1 bo sprawdzasz czy zmienna $a jest liczbą całkowitą. Dasz $a = 1.5 to zwróci 0 bo jest liczbą niecałkowitą.

$x=IsInt($a+1.1) ;zwróci 0 bo wynik to 2.1 czyli liczba niecałkowita

$x=IsFloat($a+1.1) ;zwróci 1 bo $a = 2.1 a funkcją IsFloat sprawdzasz czy liczba jest niecałkowita.

 

Jest to całkowicie zbędne w Twoim skrypcie i nie o to tu chodzi.

Opublikowano

Proponowal bym od nowa zrobic program opierajac sie na skrypcie FastFind. To to samo co masz teraz tylko w wersjii szybszej i rozszezonej.

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

Opublikowano

Z tym fastfindem to bym sie tak nie rozpedzal. ;) Raz, ze bot ma tylko grac w ruletke, wiec predkosc nie ma tu znzaczenia (dodatkowo szuka na malym obszarze to nawet nie zauwazy roznicy). Dwa, widac u kolegi brak podstaw programowania, a to jednak jest potrzebne aby korzystac z kodu pisanego przez innych. 

 

 

Opublikowano

Witam chciał bym się spytać czy w auto it da się zrobić cos takiego że jesli leci ta petla i wartosc wyniesie 6 to czy jest dalej mozliwosc sprawdzania pixela taka petla while w petli while aby mozliwe były wykonywane dwa skrypty na raz 1 czesc pixel scearch i 2 czesc instrukcje warunkowe if 

Global $zielony = 0
Global $czerwony = 0
Global $kolor = 0

While 1
	Sleep (3550)
	$kolor_zielony = PixelSearch(576, 634,683, 655,0x008000)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf
	$kolor_czerwony = PixelSearch(576,634,683,655,0xD0242A)
	If not @error Then
		$kolor = $kolor + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf
	MsgBox (0,"JEST CZERWONY!",$kolor,1)
	For $kolor = 1 to 2
		Sleep (10500)
		MouseClick ("left",1016, 509) ;stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)
	Next
	For $kolor = 2 To 3

	Sleep (10500)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (2500)
	Next
	For $kolor = 3 To 4

		Sleep (10500)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	Next
	If $kolor = 4 Then

		Sleep (10500)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	EndIf
	If $kolor = 5 Then

		Sleep (10500)
		MouseClick ("left",1079, 511)
		Sleep (100)
		MouseClick ("left",1079, 511)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	EndIf
WEnd

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...