Ausnahme für eine While

12/29/2011 16:30 Project_X#1
PHP Code:
$x 0
$y 
0
$color 
0
$newColor 
0
$status 
"off"


While
    If 
$status "on" Then
        
If _getCurrentColor($x$y) <> $color Then
            Send
("6")
            
Sleep (3000)
        EndIf
    EndIf
WEnd

Func _getDefault
()
    
$coord MouseGetPos()
    
$x $coord[0]
    
$y $coord[1]
    
$color Hex(PixelGetColor$coord[0], $coord[1]), 3)
    
$status "on"
EndFunc

Func _getCurrentColor
($xDef$yDef)
    
$newColor Hex(PixelGetColor$xDef$yDef), 3)
    Return (
$newColor)
EndFunc 
Das soll letzendlich ein Bot werden, der automatisch einen Pot einwerfen soll:

Das wurde alles zwar schon super verfasst von TheForsaken allerdings sendet er durchgehend eine Taste (bei mir die Zahl "6")

Allerdings möchte ich, das er nur "6" drückt, wenn die farbe im Makierten bereich nicht mehr die Ursprungsfarbe ist.

Sobald die Ursprungsfarbe wieder erreicht ist, soll das drücken der "6"-taste aufhören.


Ps: Ich hoffe ich konnte mich klar und deutlich ausdrücken :).
12/29/2011 17:50 MoepMeep#2
Code:
        If _getCurrentColor($x, $y) <> $color Then
            Send("6")
            Sleep (3000)
        EndIf
Hast du doch schon drin o.O

Und für einen status bitte boolean und nicht string.
12/29/2011 21:45 Project_X#3
Quote:
Originally Posted by MoepMeep View Post
Code:
        If _getCurrentColor($x, $y) <> $color Then
            Send("6")
            Sleep (3000)
        EndIf
Hast du doch schon drin o.O

Und für einen status bitte boolean und nicht string.
Wie meinst das mit boolean & status?

Ja hab ich zwar drinne, aber sobald meine Hp. in diesem falle.
einmal ganz unten sind, drückt er durchgehend alle 3sek. die 6.


er soll aber, sobald die Hp wieder voll ist, damit aufhören, nur das tut er noch nicht wirklich :(
12/29/2011 22:31 MoepMeep#4
Quote:
Originally Posted by Project_X View Post
Wie meinst das mit boolean & status?

Ja hab ich zwar drinne, aber sobald meine Hp. in diesem falle.
einmal ganz unten sind, drückt er durchgehend alle 3sek. die 6.


er soll aber, sobald die Hp wieder voll ist, damit aufhören, nur das tut er noch nicht wirklich :(
$status = "on"
12/30/2011 02:46 Project_X#5
Quote:
Originally Posted by MoepMeep View Post
$status = "on"
achso, aber es kann doch nicht daran liegen, oder?
12/30/2011 02:59 MoepMeep#6
Sehr unwahrscheinlich.
Das ganze sieht logisch gesehen richtig aus. Was mich allerdings wundert ist, dass du _getDefault() nicht aufrufst. Auch der Teil, welcher in keiner Funktion steht wundert mich. Oder ist das normal bei dieser grottenschlechten AutoIt syntax? Seriously, <> statt !=? o.O

Was ich dir aber generell raten würde, geh von diesem Pixeldreck weg, lies lieber den Speicher aus.

Deine globale Variable newColor kannst du dir übrigens sparen

Code:
Func _getCurrentColor($xDef, $yDef)
    Return (Hex(PixelGetColor( $xDef, $yDef), 3)
EndFunc
Dies geht zumindest in jeder normalen Sprache :p
01/01/2012 22:24 Project_X#7
Quote:
Originally Posted by MoepMeep View Post
Sehr unwahrscheinlich.
Das ganze sieht logisch gesehen richtig aus. Was mich allerdings wundert ist, dass du _getDefault() nicht aufrufst. Auch der Teil, welcher in keiner Funktion steht wundert mich. Oder ist das normal bei dieser grottenschlechten AutoIt syntax? Seriously, <> statt !=? o.O

Was ich dir aber generell raten würde, geh von diesem Pixeldreck weg, lies lieber den Speicher aus.

Deine globale Variable newColor kannst du dir übrigens sparen

Code:
Func _getCurrentColor($xDef, $yDef)
    Return (Hex(PixelGetColor( $xDef, $yDef), 3)
EndFunc
Dies geht zumindest in jeder normalen Sprache :p
Ah ok :) danke, Ja ich weiß zwar, wie ich meinen speicher auslese,
aber weiß dann allerdings nicht, wie ich das ganze in AutoIt Anwenden soll..

Ich meine, wenn ich dann z.B. Die HP ausgelesen habe,

also Pointer usw. Wir schreibe ich dann, dass "Wenn" Hp unter "..." dann Send ("6")

:o
01/01/2012 23:25 omer36#8
Quote:
Originally Posted by Project_X View Post
Ah ok :) danke, Ja ich weiß zwar, wie ich meinen speicher auslese,
aber weiß dann allerdings nicht, wie ich das ganze in AutoIt Anwenden soll..

Ich meine, wenn ich dann z.B. Die HP ausgelesen habe,

also Pointer usw. Wir schreibe ich dann, dass "Wenn" Hp unter "..." dann Send ("6")

:o
Ist eig. einfach..
Erst brauchst du z. B. die NomadMemory.au3 (google oder Forensuche)
Dann baust du dein Script z. B. so auf:

PHP Code:
#RequireAdmin
#include <Nomadmemory.au3>

$Open _MemoryOpen(ProcessExists("lala.exe"))
If @
error Then MsgBox(4096"Fehler""Das richtige Fenster konnte nicht gefunden werden")


$Pointer 0x106507E8
Global $PointerOffset[4] = [00x230x340x11]  ;die 0 am anfang muss immer hin

$PointerRead 
_MemoryPointerRead($Pointer$Open$PointerOffset)

If 
$PointerRead[1] == 6 Then
    Send
("6")
EndIf 
Hier mal ein kleiner miniBot, den ich vor langer Zeit mal gemacht hatte:
01/02/2012 00:02 lolkop#9
diese pointer funktion, welche ihr alle so gerne nutzt, ist absolut ineffizient.

da liest hier 3 mal die selbe adresse aus, und führst daraufhin eine weitere ReadProcessMemory funktion aus. und das ganze auchnoch in einer schleife.

es würde viel mehr sinn machen, den pointer einmalig auszulesen, und daraufhin die offsets in einer schleife auszulesen.

für den unwarscheinlichen fall, das der pointer sich während der laufzeit ändert, kann dieser immernoch über einzelne abfragen, der offset werte, in diesen seltenen fällen geupdated werden.
01/03/2012 21:32 Project_X#10
Quote:
Originally Posted by omer36 View Post
Ist eig. einfach..
Erst brauchst du z. B. die NomadMemory.au3 (google oder Forensuche)
Dann baust du dein Script z. B. so auf:

PHP Code:
#RequireAdmin
#include <Nomadmemory.au3>

$Open _MemoryOpen(ProcessExists("lala.exe"))
If @
error Then MsgBox(4096"Fehler""Das richtige Fenster konnte nicht gefunden werden")


$Pointer 0x106507E8
Global $PointerOffset[4] = [00x230x340x11]  ;die 0 am anfang muss immer hin

$PointerRead 
_MemoryPointerRead($Pointer$Open$PointerOffset)

If 
$PointerRead[1] == 6 Then
    Send
("6")
EndIf 
Hier mal ein kleiner miniBot, den ich vor langer Zeit mal gemacht hatte:
An deinem Mini-bot erkennt man, das ich das selbe ziel habe wie du ;)

Nksp = Lastchaos, was?:)


Also das mit dem ganzen bypass kram & xtrap umgehen ist eigentlich total einfach.

Allerdings tue ich mich sehr schwer bei While's in AutoIt

bzw mit der syntax von Autoit
01/03/2012 21:36 MoepMeep#11
Quote:
Originally Posted by Project_X View Post
An deinem Mini-bot erkennt man, das ich das selbe ziel habe wie du ;)

Nksp = Lastchaos, was?:)


Also das mit dem ganzen bypass kram & xtrap umgehen ist eigentlich total einfach.

Allerdings tue ich mich sehr schwer bei While's in AutoIt

bzw mit der syntax von Autoit
Wenn dir die miserable AutoIt syntax nicht zusagt, wechsel einfach zu einer Vernünftigen Sprache ;)
01/03/2012 21:56 Project_X#12
Quote:
Originally Posted by MoepMeep View Post
Wenn dir die miserable AutoIt syntax nicht zusagt, wechsel einfach zu einer Vernünftigen Sprache ;)
& was würdest du empfehlen? :)

hatte mich mal an c++ probiert aber da bekomme nichts auf die reihe. :(

hab mir dafür auch mal ein buch gekauft, allerdings wurde das alles dort komisch erklärt & somit konnte ich damit auch nicht viel anfangen :(
01/03/2012 22:00 lolkop#13
Quote:
Originally Posted by MoepMeep View Post
Wenn dir die miserable AutoIt syntax nicht zusagt, wechsel einfach zu einer Vernünftigen Sprache ;)
wer autoit nutzt, dem sollte auch klar sein das man hiermit weder systemnahe, noch objektorientiert programmieren kann. es ist halt eine scriptsprache, welche auf einem extrem hohen abstraktionsgrad fungiert.

gekennzeichnet ist autoit durch die relativ intelligente automatische erkennung und konvertierung von typen. für einige ein segen, für andere sicherlich lästig, ist autoit hiermit auf jeden fall für einfache programme, wie bots bzw. automatisierungstools allgemein sehr gut geeignet.

nur aufgrund der eigenen meinung zur syntax einer sprache, von dieser abzuraten finde ich dann doch sehr unprofessionell :P
01/03/2012 22:06 Project_X#14
Quote:
Originally Posted by lolkop View Post
wer autoit nutzt, dem sollte auch klar sein das man hiermit weder systemnahe, noch objektorientiert programmieren kann. es ist halt eine scriptsprache, welche auf einem extrem hohen abstraktionsgrad fungiert.

gekennzeichnet ist autoit durch die relativ intelligente automatische erkennung und konvertierung von typen. für einige ein segen, für andere sicherlich lästig, ist autoit hiermit auf jeden fall für einfache programme, wie bots bzw. automatisierungstools allgemein sehr gut geeignet.

nur aufgrund der eigenen meinung zur syntax einer sprache, von dieser abzuraten finde ich dann doch sehr unprofessionell :P

Nun ja ich finde AutoIt ja auch nicht schlecht, allerdings blicke ich manchmal nicht durch

Ich hab mir den Bot mal von Omer36 angeguckt, fande den jetzt garnicht mal so schlecht, finde ihn für einen Anfänger wie mich ziemlich übersichtlich gestalltet, trotzdem bin ich verwirrt das er mir in die fehler meldung gibt:
_MemoryPointerRead() : Undefined function

Verstehe jetzt dort nicht ganz den fehler.
01/03/2012 22:18 lolkop#15
Quote:
Originally Posted by Project_X View Post
Nun ja ich finde AutoIt ja auch nicht schlecht, allerdings blicke ich manchmal nicht durch

Ich hab mir den Bot mal von Omer36 angeguckt, fande den jetzt garnicht mal so schlecht, finde ihn für einen Anfänger wie mich ziemlich übersichtlich gestalltet, trotzdem bin ich verwirrt das er mir in die fehler meldung gibt:
_MemoryPointerRead() : Undefined function

Verstehe jetzt dort nicht ganz den fehler.
das soll jetzt keine beleidigung sein, aber deine probleme haben nichts mit der sprache, oder der syntax der sprache zu tun.

wie ich das sehe, fehlen dir einfach grundkenntnisse was logik, mathematik und auch englisch angeht :P

wenn du programmieren lernen willst, musst du unbedingt verstehen, wie man seine ideen als automaten ausdrücken kann. egal für welche sprache du dich entscheidest, wenn du derartige logische grundkenntnisse nicht drauf hast, wirst du nicht in der lage sein vernünftige programme zu schreiben.

davon abgesehen arbeiten fast alle sprachen auf der "closed world assumption". alles was nicht bekannt ist kann nicht bearbeitet werden.

so kam es auch zu dem von dir erwähnten fehler. "Undefined function" = nicht definierte funktion.