|
You last visited: Today at 17:00
Advertisement
Frage zu meinem ersten Mini-Pixel-Bot
Discussion on Frage zu meinem ersten Mini-Pixel-Bot within the AutoIt forum part of the Coders Den category.
05/14/2010, 21:00
|
#1
|
elite*gold: 24
Join Date: Mar 2009
Posts: 222
Received Thanks: 24
|
Frage zu meinem ersten Mini-Pixel-Bot
hey leute,
habe meinen bot halb fertig,
fehlt nur noch die wichtigste funktion
er ist für das spiel fastandthefuriousfig.com
er soll, wenn das cop interesse über 50% ist, immer nach 30 sekunden f5 drücken,
und wenn es unter 50% ist, soll er auf den einen knopf drücke,
ich weiß nur nicht wie ich es scripten soll, dass er das cop interesse erkannt
den rest krieg ich selbst hin=)
bitte mal hilfestellung
euer kazairl
|
|
|
05/14/2010, 21:43
|
#2
|
elite*gold: 0
Join Date: Jan 2010
Posts: 447
Received Thanks: 315
|
ist das ne progressbar? Wenn ja kannst du dir die pixel rausschreiben, die an der 50% stelle sind, wenn der balken bei 50% steht.
Wenn man nur ne zahl sieht, würde ich einfach mit das html document herunterladen und nach dem wert suchen (das solltest du selber hinbekommen ist nicht wirklich schwer)
|
|
|
05/14/2010, 23:39
|
#3
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,634
Received Thanks: 1,637
|
wert via AutoIT befehl immer wieder auslesen lassen fertig.
Tipp: schau dir StringRegExpReplace("") mal in der AutoIt Hilfe an. Mit dem kannst du wenn du den Quelle Code ausgelesen hast den wert suchen.
Aus der hilfe datei das Beispiel:
PHP Code:
Test1() Test2()
; This example demonstrates a basic replacement. It replaces the vowels aeiou ; with the @ character. Func Test1() Local $sInput = "Where have all the flowers gone, long time passing?" Local $sOutput = StringRegExpReplace($sInput, "[aeiou]", "@") Display($sInput, $sOutput) EndFunc ; Test1()
; The following example demonstrates using back-references to change the date ; from MM/DD/YYYY to DD.MM.YYYY Func Test2() Local $sInput = 'some text1 12/31/2009 01:02:03 some text2' & @CRLF & _ 'some text3 02/28/2009 11:22:33 some text4' Local $sOutput = StringRegExpReplace($sInput, '(\d{2})/(\d{2})/(\d{4})', ' $2.$1.$3 ') Display($sInput, $sOutput) EndFunc ; Test2()
Func Display($sInput, $sOutput) ; Format the output. Local $sMsg = StringFormat("Input:\t%s\n\nOutput:\t%s", $sInput, $sOutput) MsgBox(0, "Results", $sMsg) EndFunc ; Display()
Greatz Benhero
|
|
|
05/15/2010, 08:32
|
#4
|
elite*gold: 24
Join Date: Mar 2009
Posts: 222
Received Thanks: 24
|
aff, dann lass ich das mal
lese mir erst dann noch 1million tuts durch, sorry blicke bei dem beispiel gar nüch durch;(
Aber habe deine Pokeplushie gelevelt
|
|
|
05/15/2010, 10:41
|
#5
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Ich hab mir das Game mal angesehn, und soweit ich das seh solltest du dir mal die IE.au3 ansehn.
Dort gibt es den Befehl _IEBodyReadText, der gibt dir den gesamten Text, der auf der Seite zu lesen ist (abgesehn von Flash Animationen usw.) zurück.
Mit StringBetween erledigst du dann den Rest (SciTe Hilfe ftw.  )
|
|
|
05/15/2010, 20:41
|
#6
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,634
Received Thanks: 1,637
|
StringBetween ist aber eig sehr .. naja ^^ wie soll ichs net sagen.. zurückgeblieben im vergleich zu meinem Befhehl.. @Kazairl
das TuT ist evt Besser: (Es gibt VIEL zu lesen *gg*)
PHP Code:
Dies hier ist eine kleine Anleitung, um das scheinbare Geheimnis von StringRegExp() zu enträtseln.
StringRegExp( "test", "pattern" [, flag ] )
"test" = Die Zeichenkette, die nach Treffern durchsucht werden soll. "pattern" = Eine Zeichenkette, bestehend aus bestimmten Schlüsselzeichen, der die Funktion genau wissen lässt was gesucht wird. Kein wenn und aber, es gibt einen Treffer oder es gibt keinen. flag[optional] = Sagt der Funktion ob nur nach dem pattern gesucht werden soll, oder ob nur der erste Treffer aus der test-Zeichenkette zurückgegeben wird oder alle.
Die wirklichen Grundkenntnisse Wie sie vielleicht schon herausgefunden haben, ist nur das Suchmuster (pattern) der einzigst komplizierte Teil von StringRegExp() (im Folgenden nur noch SRE genannt). Ich finde es ist am einfachsten sich ein Muster vorzustellen, das der Funktion sagt eine Zeichenkette Zeichen für Zeichen mit diesem Muster abzugleichen. Es gibt verschiedene Wege ein bestimmtes Zeichen zu finden: Wenn beispielsweise die Zeichenfolge "test" gesucht wird, dann sollte es recht einfach sein diese zu finden. Es soll der Funktion SRE mitgeteilt werden als erstes nach einem"t" in der Zeichenkette zu suchen. Wird eines von der Funktion gefunden, nimmt sie an eine Übereinstimmung gefunden zu haben und der Rest des Suchmusters wird dazu genutzt, zu prüfen ob das was gefunden wurde keine Übereinstimmung ergibt. Also, wenn das nächste Zeichen ein "e" ist, könnte es immer noch eine Übereinstimmung sein. Sagen wir das nächste Zeichen ist ein "x". Dann weiß SRE unverzüglich, dass es keine Übereinstimmung ergibt, weil wir im Suchmuster festgelegt haben, dass das dritte Zeichen ein "s" ist.
Beispiel 1
MsgBox(0, "SRE Beispiel 1 - Ergebnis", StringRegExp("text", 'test'))
In diesem Beispiel, sollte die MessageBox "0" ausgeben, was bedeutet, das Suchmuster "test" wurde in der zu testenden Zeichenkette "text" nicht gefunden. Ich weiß, dies erscheint kinderleicht, aber jetzt wissen wir wenigstens auch warum "test" nicht gefunden wurde.
Um als nächstes ein Suchmuster festzulegen, nutzen wir eine Zeichenklasse ("[ ... ]"). Die Abgleichung der Zeichenmuster in Zeichenklassen können wir uns wie das logische "OR" vorstellen. Nehmen wir wieder das vorherige Beispiel. Wir wollen entweder die Zeichenkette "test" oder "text" finden. Nun, die Art wie ich beginne nach einem Suchmuster Ausschau zu halten, ist so zu denken wie SRE es auch tun würde: Das erste abzugleichende Zeichen ist "t", dann der Buchstabe "e", dies gilt bis jetzt für beide Suchmuster. Jetzt möchten wir ein "s" OR "x", demnach können wir eine Zeichenklasse als Ersatz nutzen für: "[sx]" bedeutet, suche nach einer Übereinstimmung mit einem "s" oder einem "x". Der letzte Buchstabe ist nun wieder ein "t", was auch wieder für beide Suchmuster gilt.
Beispiel 2
MsgBox(0, "SRE Beispiel 2 - Ergebnis", StringRegExp("text", 'te[sx]t')) MsgBox(0, "SRE Beispiel 2 - Ergebnis", StringRegExp("test", 'te[sx]t'))
Beide Aufrufe von SRE sollten zu dem Ergebnis "1" führen, denn das Suchmuster sollte eine Übereinstimmung in beiden Fällen "test" und "text" ergeben.
Es kann außerdem festgelegt werden, wie oft jedes Zeichen übereinstimmen soll, indem man "{Anzahl der Übereinstimmungen}" dem Zeichen anfügt oder man legt einen Bereich "{min, max}" fest. Das erste Beispiel weiter unten ist eigentlich überflüssig, aber zeigt was ich meine:
Beispiel 3
MsgBox(0, "SRE Beispiel 3 - Ergebnis", StringRegExp("text", 't{1}e{1}[sx]{1}t{1}')) MsgBox(0, "SRE Beispiel 3 - Ergebnis", StringRegExp("aaaabbbbcccc", 'b{4}'))
Die etwas fortgeschrittenen Grundlagen In diesem Moment wird man möglicherweise denken "Ist dies nicht bloß eine bessere StringInStr() Funktion?". Nun, nutzt man nur den flag Wert 0, liegt man mit diesem Gedanken meist richtig. Aber SRE ist wesentlich mächtiger als StringInStr(). Wenn man SRE's immer öfter und mehr benutzt, mag man denken sehr wenig darüber zu wissen und noch weniger darüber die Art des Suchmusters festzulegen. Doch es gibt Mittel und Wege jedes zu suchende Zeichen mehr oder weniger genau in dem Suchmuster zu definieren. Nehmen wir, zum Beispiel, eine Zeile aus einem Chat-Log eines Spieles: "Knorriges Monster schlägt dich und fügt dir 18 Schadenspunkte zu." Jetzt möchten wir herausfinden wie viele Schadenspunkte Knorriges Monster uns zugefügt hat. Nun gut, wir können StringInStr() nicht dafür benutzen, denn wir suchen nicht nach "18", wir suchen "????", wobei ? irgendeine Zahl sein kann.
Hier zeige ich nun wie ich das Suchmuster zusammensetzen würde: 1) Wir wissen, dass es IMMER nichts anderes als Zahlen enthält. 2) Wir wissen, dass es MANCHMAL 2 Zeichen lang ist. 2a) Wir wissen vom Spielen her, dass die maximalen Schadenspunkte die ein Monster uns zufügen kann 999 ist. 2b) Wir wissen, dass die minimalen Schadenspunkte die ein Monster uns zufügen kann 0 ist. 3) Wir wissen, dass es IMMER zwischen 1 und 3 Zeichen lang ist. 4) Wir wissen, dass es keine anderen Zahlen in der zu testenden Zeichenkette gibt.
An diesem Punkt, wollen wir uns an den flag Wert "1" und Zeichengruppen "()" herantasten. Der Wert "1" des Flags bedeutet, dass SRE nicht bloß auf Übereinstimmung des Suchmusters prüft, sondern auch ein Array zurückgibt, in dem jedes Element eine übereinstimmende "Gruppe" von Zeichen enthält. Um nicht zu weit vom Kurs abzukommen, nehmen wir dieses Beispiel:
Beispiel 4
$asResult = StringRegExp("Dies ist ein Test-Beispiel", '(Test)', 1) If @error == 0 Then MsgBox(0, "SRE Beispiel 4 - Ergebnis", $asResult[0]) EndIf $asResult = StringRegExp("Dies ist ein Test-Beispiel", '(Te)(st)', 1) If @error == 0 Then MsgBox(0, "SRE Beispiel 4 - Ergebnis", $asResult[0] & "," & $asResult[1]) EndIf
So, als erstes muss das Suchmuster in der zu testenden Zeichenkette eine Übereinstimmung finden. Ist dies der Fall, dann wird SRE mitgeteilt jegliche Gruppen ("()")"einzufangen" und sie in dem zurückzugebenden Array abzulegen. Es können mehrfache Gruppen verwendet werden, wie im zweiten Teil des Beispielcodes.
Ok, zurück zum knorrigen Monster. Jetzt, wo wir wissen wie man Text "einfängt", lasst uns das Suchmuster zusammensetzen: Seitdem wir wissen, dass wir Zahlen suchen, bieten sich uns 3 Wege an für "Finde eine Zahl": "[:digit:]", "[0-9]", und "\d". Das erste ist vermutlich am einfachsten zu verstehen. Es gibt ein paar Klassen (digit, alnum, space, etc. siehe in der Hilfedatei für eine vollständige Liste) die wir nutzen können um Zeichenklassen festzulegen, eine von ihnen ist für Zahlen. "[0-9]" legt lediglich einen Bereich aller Zahlen zwischen 0 und 9 fest. "\d" ist bloß ein Sonderzeichen mit der gleichen Bedeutung wie die ersten beiden Arten. Zwischen den dreien besteht kein Unterschied, und mit allen SRE's gibt es wenigstens ein paar Wege um irgendein Suchmuster zusammenzusetzen.
Nun, das erste was wir wissen ist, dass wir die Zahlen(-gruppe) einfangen wollen, also weisen wir daraufhin indem wir eine Klammer öffnen "(". Als nächstes wissen wir, dass wir zwischen 1 und 3 Zeichen einfangen wollen, alle aus Zahlen bestehend, sodass unser Suchmuster jetzt aussieht wie "([0-9]{1,3}". Und letztendlich schließen wir das ganze mit einer Klammer um auf das Ende der Gruppe hinzuweisen: "([0-9]{1,3})". Lasst es uns ausprobieren:
Beispiel 5
$asResult = StringRegExp("Knorriges Monster schlägt dich und fügt dir 18 Schadenspunkte zu.", _ '([0-9]{1,3})', 1) If @error == 0 Then MsgBox(0, "SRE Beispiel 5 - Ergebnis", $asResult[0]) EndIf
Na bitte, die MessageBox zeigt korrekt "18" an.
Als nächstes schauen wir uns die nicht-einfangenden Gruppen an. Die Art wie wir diese Gruppen kenntlich machen ist "(?:" anstatt nur "(". Lasst uns annehmen euer Log sagt "Du konntest 36 von Knorriges Monster 279 Schadenspunkte ausweichen.". Wenn wir nun Beispiel 5 ausführen, erhalten wir "36" anstatt "279". Nun möchte ich an dieser Stelle den Unterschied der beiden Zahlen untersuchen. Das erste was mir auffällt ist, dass der zweiten Zahl immer ein Leerzeichen folgt und dann das Wort "Schadenspunkte". Wir könnten nun unser voriges Suchmuster abändern zu "([0-9]{1,3} Schadenspunkte)", aber was ist wenn unser Skript nur nach der Menge der Schadenspunkte sucht, ohne "Schadenspunkte" an das Ende der Zahl anzuheften? An dieser Stelle können wir nicht-einfangende Gruppen einsetzen um unser Ziel zu erreichen.
Beispiel 6
$asResult = StringRegExp("Du konntest 36 von Knorriges Monster 279 Schadenspunkte ausweichen.", '([0-9]{1,3})(?: Schadenspunkte)', 1) If @error == 0 Then MsgBox(0, "SRE Beispiel 6 - Ergebnis", $asResult[0]) EndIf
Dieses Thema könnten wir noch weiter ausdehnen, aber Zielsetzung dieses Tutorials ist die Grundlagen zu vermitteln, wie reguläre Ausdrücke funktionieren und hauptsächlich wie SRE "denkt". Hier noch einige Sachen die man im Hinterkopf behalten sollte: - Nicht vergessen über das Suchmuster für jedes Zeichen nachzudenken - Die StringRegExp() Funktion findet das erste Zeichen in dem Suchmuster, danach ist es dein Job genügend Belege zu erbringen um zu "Beweisen" ob oder ob keine Übereinstimmung erfolgt. Beispiel 6 ist ein gutes Beispiel dafür. - Nicht vergessen, [ ... ] bedeutet OR ([xyz] finde ein "x", ein "y", oder ein "z") Sollten noch Fragen offen sein, sollte der erste Griff zur Hilfedatei sein! Diese erklärt im Detail die wesentliche Syntax, die mit SRE daherkommt. Eine Sache auf die man ein besonderes Augenmerk legen sollte ist die Sektion über "Wiederkehrende Zeichen". Dies macht das Suchmuster leichter lesbar, wenn man für bestimmte Zeichen Bereiche festlegt. Zum Beispiel: "*" ist gleichbedeutend mit {0,} oder dem Bereich von 0 bis irgendeine Anzahl von Zeichen.
Viel Glück, Reguläre Ausdrücke können großartig dazu genutzt werden um die Länge des Codes zu reduzieren, und machen eine spätere Änderung dessen wesentlich einfacher. Korrekturen und Resonanz sind stets willkommen!
|
|
|
05/15/2010, 22:36
|
#7
|
elite*gold: 24
Join Date: Mar 2009
Posts: 222
Received Thanks: 24
|
 danke ich versuchs mal,
kriegst schonma nen thanks
|
|
|
 |
Similar Threads
|
Kurze mini Frage
05/25/2010 - CrossFire - 9 Replies
HeyHo CrossFire Section :)
Ich wollte ganz schnell fragen , wie ich bei meinem spoiler
den Link http://www.elitepvpers.com/forum/crossfire/581942-c rossfire-guid-lowbeat.html umbenenen kann das er heißt :
.LowBeat´s Anfänger Guide .
Kriegt auch ganz dicken THX :handsdown:
Mfg
|
FRAGE ZU MODIFIENT CLIENT 4.0 DIE ERSTEN 5 DIE MIR HELFEN KRIGEN NEN FETTES THX
04/05/2010 - Metin2 Private Server - 22 Replies
Hey also ich starte meinen Pc mit den ordner von neonblue.
Wenn ich ihn starte steht da immer servername beim client,wenn man sich einloggt.
kann man das irgendwie einstellen das da mein servername steht ?
wenn ja bitte hier rein posten :-)
:rtfm::p:pimp::D:mofo:;):handsdown::o:bandit::(:) :mad::rolleyes::cool::p:eek:
|
Help with my first bot |Hilfe mit meinem ersten Bot
12/21/2009 - GW Bots - 1 Replies
ENG: I've learned autoit and I am ready to make my first bot, but i have no idea how to script guild wars.
I have GWCA and everything I need..
I want to make a Jade Quarry bot, so what it has to do is:
Click the Enter Battle button
Run to the Yellow Quarry portal
tab to an opponent
Spam necessary skills
If it dies, it needs to repeat after res.
Now, I'm totally new to GW scripting, and since i dont speak german its very hard for me to navigate this website.
|
Mouse to Pixel Frage!
01/19/2009 - GW Bots - 5 Replies
Also meine frage ist ob es eine möglichkeit gibt, das wenn ich
if pixelsearch(...) then
mache und er den pixel findet das er einen mouseclick zu dem pixel macht?
also bsp
if pixelsearch(...) then
mouseclicktopixel
|
Brauche Hilfe bei meinem Mini Google Translate
11/09/2008 - Metin2 - 3 Replies
Hall erstmal
Ich habe heute so eine Idee gehabt "es wär doch toll so einen Mini Google übersetzer zu haben". Und jetzt versuche ich diese Idee umzusetzen. Bisher bin ich nicht sehr weit gekommen.
Ich bräcute mal hilfe dazu wie ich da noch verbessern könnte. Also die Translate Funktion funktioniert noch nicht und desswege brauche ich hilfe.
<<<<Hier der Download>>>>
mfg Gammler232
|
All times are GMT +1. The time now is 17:01.
|
|