[AutoIt]Tutorial zu Browsergamebots (Packetbots und IEbots)

08/29/2010 17:10 Shadow992#136
1. Das Einloggen scheint nicht zu klappen, navigier erstmal "normal" (ohne Post) auf die Seite lass die Cookies auslesen und mach dann das Request mit Posts. Vielleicht enthält dein Nick auch Sonderzeichen, dann solltest du Change benutzen.

2. Wenn man sich die Funktionen mal genau anschaut, dann sieht man, dass jede Änderung dazu führt, dass die Funktion garnicht oder nicht mehr richtig funktioniert.
Außerdem solltest du allgemein nie etwas an den Standartwerten von Variablen für Funktionen machen, die Macher werden schon Gründe gehabt haben das so zu machen.
08/29/2010 20:07 Thamnophis#137
WoW, es klappt!
Ich weiß warum das vorher nicht funktioniert hatte...
Hatte anstatt 'password='' pass='...
Egal, das mit den Variabeln ist jetzt soo logisch...
Hab mir die ganzen youtube TuTs von AMrK angeschaut.
Jetzt weiß ich wieso er was deklariert hat und nun gibt alles einen Sinn.
Ich steh nurnoch vor einem Problem:
Ich bekomme nen Button nicht "angeklickt".
Da hier irgendwas mit der $sSeite = "" nicht stimmt.
Hier der httpheader:

demnach muesste ich so die Funktion aufstellen:
PHP Code:
$source=TCPRequest($ip,"XXX.de",0'/internet.php',"",$cookies
Jedoch habe ich genau die Funktion schon einmal...
Naemlich fuer einen Link davor:

Das ist jetzt ein Link, das davor ein Button...Beides hat oben /internet.php.
Jedoch ist der Link ein GET und der Button ein Post.
Beim Button gibs nochn Cookie dazu, sowie das hier in Zeile 17 cat=3&takejob=301.
301 ist der Job, den ich haben will. Einer darunter ist 302, nur zur Info.
Also haette ich zweimal die gleiche funktion hintereinander...
Oder setzt ich dann fuer den Button einfach einen Referrer?
Hast du da vielleicht eine Idee?
Ka...



Vielen Dank fuer deine Hilfe!

Gruß Thamnophis
08/29/2010 21:45 Shadow992#138
Quote:
Originally Posted by Thamnophis View Post
Das ist jetzt ein Link, das davor ein Button...Beides hat oben /internet.php.
Jedoch ist der Link ein GET und der Button ein Post.
Beim Button gibs nochn Cookie dazu, sowie das hier in Zeile 17 cat=3&takejob=301.
Das ist kein Cookie, das ist das Post!
Du musst im Grunde immer wenn du "POST" siehst sofort daran denken:
PHP Code:
$post="..." 
Du musst also nur noch das Post hinzufügen und ins TCP-Request packen, dann sollte es funktionieren:
PHP Code:
$post="cat=3&takejob=301"
$source=TCPRequest($ip,"XXX.de",0'/internet.php',$post,$cookies
08/30/2010 18:59 Thamnophis#139
Hi,
leider habe ich mich zu frueh gefreut...
Nach genauerem Hinschauen gibt mir der Quelltext am Ende doch nur die Nachricht, dass mein Benutzer nicht regestriert ist...
Am Pw oder am username kannst net liegen...Sind auch keine Sonderzeichen
enthalten.
Irgendwas stimmt am Quellcode noch nicht...
Kannst du hier nochma rueberschaun?:
Und mein Quelltext:

Ist bei der TXPRequest am Ende beim Host wirklich nur '*' nicht "*"?
Ich hoffe du findest was...

Gruß Thamnophis
08/30/2010 19:23 Shadow992#140
Quote:
Originally Posted by Thamnophis View Post
Hi,
leider habe ich mich zu frueh gefreut...
Nach genauerem Hinschauen gibt mir der Quelltext am Ende doch nur die Nachricht, dass mein Benutzer nicht regestriert ist...
Am Pw oder am username kannst net liegen...Sind auch keine Sonderzeichen
enthalten.
Irgendwas stimmt am Quellcode noch nicht...
Kannst du hier nochma rueberschaun?:
Und mein Quelltext:

Ist bei der TXPRequest am Ende beim Host wirklich nur '*' nicht "*"?
Ich hoffe du findest was...

Gruß Thamnophis
Na ist doch ganz easy. ;)
PHP Code:
$post='username='&$name&'password='&$passwort&'autologin=on&loginbutton=Login&loginaction=login' 
Da fehlen die '&', so sollte es also gehen:
PHP Code:
$post='username='&$name&'&password='&$passwort&'&autologin=on&loginbutton=Login&loginaction=login' 
08/31/2010 18:46 Thamnophis#141
Hi,
das war ein super Tipp!
Ich dachte das & vor der Variable trennt das schon ab...

In meinem Browsergame kann man nur ein Event ausfuehren, wenn das vorige schon abgelaufen ist...
Angenehmerweise wird diese countdownzeit direkt auf der Startseite angezeigt, egal welches Event ablaeft.
Ich moechte jetzt diese Zeit auslesen und dann in meine countdown funktion packen...
Damit startet der Bot erst, wenn diese Zeit abgelaufen ist.
Ich habe den HTML text in eine .ini geschrieben (inner txt dateit kommt nu murks raus).
Jetzt muss ich den Teil finden, wo die Zeit steht und diese auslesen.
Welche Funktion bietet sich da an?
Ich hatte mir Objget ausgedacht und stringbetween.
Leider gibt es ja nicht immer ein Event, was abzuwarten ist.
Das heist, ich kann nicht immer nach der Zeit suchen...

So stehts geschrieben, wenn eine Zeit vorhanden ist:

Und so, wenn keine Zeit da ist:

Ich muss jetzt also eine If funktion aufstellenn: z.b.
PHP Code:
if ObjGet("Pfad/.ini","headercountdown"then
$Stunde 
_Stringbetween($Source," ",":")
$Minute _stringbetween($Source,":",":")
$Sekunde _stringbetween($Source,":","</span>")
Else
sleep(10)
Endif

_countdown(($Stunde*120)+($Minute*60)+($Sekunde))

Bot startet... 
Aus $Source habe ich die .ini erstellt.

Was haeltst du davon?
Oder gibs da ne bessere moeglichkeit?

P.s Wie geben ich eingentlich einen Pfad von einer Datei/Bild an, wenn
alles in einem Ordner ist und der script die Bilder auch auf anderen PC's finden soll?

Vielen Dank nocheinmal!

Gruß Thamnophis
08/31/2010 19:22 Shadow992#142
Quote:
Originally Posted by Thamnophis View Post
Hi,
das war ein super Tipp!
Ich dachte das & vor der Variable trennt das schon ab...

In meinem Browsergame kann man nur ein Event ausfuehren, wenn das vorige schon abgelaufen ist...
Angenehmerweise wird diese countdownzeit direkt auf der Startseite angezeigt, egal welches Event ablaeft.
Ich moechte jetzt diese Zeit auslesen und dann in meine countdown funktion packen...
Damit startet der Bot erst, wenn diese Zeit abgelaufen ist.
Ich habe den HTML text in eine .ini geschrieben (inner txt dateit kommt nu murks raus).
Jetzt muss ich den Teil finden, wo die Zeit steht und diese auslesen.
Welche Funktion bietet sich da an?
Ich hatte mir Objget ausgedacht und stringbetween.
Leider gibt es ja nicht immer ein Event, was abzuwarten ist.
Das heist, ich kann nicht immer nach der Zeit suchen...

So stehts geschrieben, wenn eine Zeit vorhanden ist:

Und so, wenn keine Zeit da ist:

Ich muss jetzt also eine If funktion aufstellenn: z.b.
PHP Code:
if ObjGet("Pfad/.ini","headercountdown"then
$Stunde 
_Stringbetween($Source," ",":")
$Minute _stringbetween($Source,":",":")
$Sekunde _stringbetween($Source,":","</span>")
Else
sleep(10)
Endif

_countdown(($Stunde*120)+($Minute*60)+($Sekunde))

Bot startet... 
Aus $Source habe ich die .ini erstellt.

Was haeltst du davon?
Oder gibs da ne bessere moeglichkeit?

P.s Wie geben ich eingentlich einen Pfad von einer Datei/Bild an, wenn
alles in einem Ordner ist und der script die Bilder auch auf anderen PC's finden soll?

Vielen Dank nocheinmal!

Gruß Thamnophis
Machs doch einfach so:
PHP Code:
if StringinStr($source,"headercountdown")<>0 then
$Stunde 
_Stringbetween($Source," ",":")
$Minute _stringbetween($Source,":",":")
$Sekunde _stringbetween($Source,":","</span>")
Else
sleep(10)
Endif 
08/31/2010 20:04 Thamnophis#143
Hi,
kannst du mir kurz erlaeutern was das macht?
StringinStr und dann <>0?
Wenn ich naemlich mein ergebnis in eine Ini schreibe, steht dort nix...
-->IniWrite("Stunde.ini","","",$Stunde)
Außerdem stimmt irgendwas mit der Addition und der Multiplikation im cooldown nicht. Auch das nimmt er nicht an:
_countDown($Stunde*120"+"$Minute*60"+"$Sekunde)
Immer diese Kleinigkeiten, die einem nicht auffallen.

Danke

Gruß Thamnophis
09/01/2010 11:31 Shadow992#144
Quote:
Originally Posted by Thamnophis View Post
Hi,
kannst du mir kurz erlaeutern was das macht?
StringinStr und dann <>0?
Wenn ich naemlich mein ergebnis in eine Ini schreibe, steht dort nix...
-->IniWrite("Stunde.ini","","",$Stunde)
Außerdem stimmt irgendwas mit der Addition und der Multiplikation im cooldown nicht. Auch das nimmt er nicht an:
_countDown($Stunde*120"+"$Minute*60"+"$Sekunde)
Immer diese Kleinigkeiten, die einem nicht auffallen.

Danke

Gruß Thamnophis
<>0 bedeutet, dass alles als Ergebniss rauskommen darf außer 0.
Es ist im Grunde das Gegenteil von =0 bzw. ==0 .
StringInStr(...) schaut ob ein String/Text in einem anderem String/Text
gefunden wurde, wenn ja ist das Ergebniss die Stelle an der der Text zum erstenmal gefunden wurde, wenn der Text nicht gefunden wurde, dann gibt StringInStr 0 zurück.

Nun zu Countdown:
PHP Code:
_countDown($Stunde*120"+"$Minute*60"+"$Sekunde
Ich weiß zwar nicht wie dein restlicher Code aussieht, aber du kannst es dir vereinfachen:
PHP Code:
$zeit=Execute($Stunde*120+$Minute*60+$Sekunde
Was mich überhaupt wundert ist, dass es keine Fehlermeldung gab.

Und zu guter letzt, solltest du nie IniWrite für größere Texte nehmen.
Alternativen wären ClipPut und FileWrite.

Btw. Du könntest auch einfach die Hilfe benutzen, um herrauszufinden was der Befehl macht:
[Only registered and activated users can see links. Click Here To Register...]
09/01/2010 12:15 Thamnophis#145
Achso ist das,
ja das StringinStr() hatte ich mir dann auch gleich rausgesucht,
aber das <>0 ist interessant. Heißt also, wenn der Text im String enthalten ist, then... .
Den Quelltext aus $Source bekomme ich ja ueber den TCPReq.
Ist das ueberhaupt ein String? Kann ich in dieser Variable ueberhaupt mit StringinStr() arbeiten?
In der ini haette ja lediglich 18 stehen duerfen, da ich ja mit
Code:
$Stunde = _Stringbetween($Source," ",":")
aus der $Source im Abschnitt
PHP Code:
[spoiler]<div id="headercountdown"></div
                        <
script language=JavaScript
                                 
                            
taskcounter("headercountdown","<a href=# class=tooltip  style=color:#FFFFFF>Aktion:<span>bis 31.08.2010 18:17:37</span> </a> ",3576)  

[/
spoiler
zwichen dem Leerzeichen " " und dem ":" genau die 18 rausgefiltert hatte (theoretisch^^).
Leider hat er ja nichts gefunden...
Danach hatte ich zwischen //"headercountdown"// und //Aktion:// gesucht, auch da hat er mir nicht //a href=# class=tooltip style=color:#FFFFFF>// ausgegeben...
Irgendwo liegt bei mir noch ein Denkfehler?!
Sollte ich mich viellleicht mit StringinStr() soweit rantasten, dass er sogar Leerzeichen erkennt?

Danke fuer deine Antwort im Vorraus

Gruß Thamnophis
09/01/2010 12:58 lolkop#146
wieso das ganze so umständlich angehen?
nicht nur das string operationen in autoit extrem ineffizient sind, auch das handling damit ist extrem bescheiden.

in diesem fall ist ganz klar regexp zu bevorzugugen.
so kannst du auf deutlich effizientere art und weise alles auf einmal auslesen.
weis nicht was genau du davon jetzt auslesen willst aber hier mal ein einfaches beispiel wie du die gesamten datumswerte einlesen könntest:
Code:
$date = StringRegExp($source, 'headercountdown(?s).*?<span>.*?(\d{2}).(\d{2}).(\d{4}) (\d{2}):(\d{2}):(\d{2})</span>', 1)
falls es einen headercountdown gibt, wird dir diese funktion das array $date mit:
Code:
$date[0] tag
$date[1] monat
$date[2] jahr
$date[3] stunde
$date[4] minute
$date[5] sekunde
ausgeben.

wenn headercountdown nicht existiert, wird diese funktion kein array ausgeben. dh bevor du das ergebnis abrufst checkst du einmal ob etwas gefunden wurde mit:
Code:
If IsArray($date) then
    ....
EndIf
09/05/2010 03:19 Kuchenfreak™#147
Gutes Tutorial^^
Bringt nen Einsteiger auf jeden Fall weiter.
09/06/2010 13:42 QuarryBot#148
Ist zwar schwer zu verstehen aber sehr gut erklärt, hab jetzt schon mein eigenen bot fertiggestellt, danke ^^
09/24/2010 13:35 jam2010#149
Hallo zusammen,

vielen Dank erstmal für das tolle Tut !!!

Ich bin gerade bei Kapitel IV : Packetbots Punkt 8. Erstellen eines kleinen Packet Botes und habe einen Test-Acc. auf Uni78 bei OGame angelegt, nur klappt das Einloggen mit dem Packet-Bot leider nicht. Nachdem ich die LoginDaten eingebe, bekomme ich immer eine Fehlermeldung..
Dann habe ich gelesen, dass es nur auf Uni1 bis Uni40 gehen soll, also habe ich jetzt einen Acc. auf Uni1 angelegt und getestet, aber leider erfolglos, der Code ist identisch mit dem aus dem Tut.
Ich bekomme ständig diese Fehlermeldung und weis nicht so recht weiter, hab jetzt schon 3h rumprobiert, schaff es aber einfach nicht, kann mir bitte einer helfen? :confused:
[Only registered and activated users can see links. Click Here To Register...]
09/24/2010 19:34 Shadow992#150
Quote:
Originally Posted by jam2010 View Post
Hallo zusammen,

vielen Dank erstmal für das tolle Tut !!!

Ich bin gerade bei Kapitel IV : Packetbots Punkt 8. Erstellen eines kleinen Packet Botes und habe einen Test-Acc. auf Uni78 bei OGame angelegt, nur klappt das Einloggen mit dem Packet-Bot leider nicht. Nachdem ich die LoginDaten eingebe, bekomme ich immer eine Fehlermeldung..
Dann habe ich gelesen, dass es nur auf Uni1 bis Uni40 gehen soll, also habe ich jetzt einen Acc. auf Uni1 angelegt und getestet, aber leider erfolglos, der Code ist identisch mit dem aus dem Tut.
Ich bekomme ständig diese Fehlermeldung und weis nicht so recht weiter, hab jetzt schon 3h rumprobiert, schaff es aber einfach nicht, kann mir bitte einer helfen? :confused:
Bigpoint scheint da einiges geändert zu haben, überspringe einfach Punkt 8 und gehen zu Punkt 9. ;)