[autoIT] Need Help (Anfaenger)

11/23/2009 15:02 WieMeinen#1
Hi, ich bin seit kurzem am coden mit autoIT und habe da auch schon ein Projekt, dass ich teils auch schon fertig habe.

Das Projekt ist ein Tool für Warcraft3 bzw. DotA Spieler, die über Garena spielen.

Es beinhaltet bis jetzt:
-automatisches Starten und Login von Garena
-Ansage des Modes, wenn ein Spieler das Game joint (als Host)
-Eingabe des Modes nach Spielstart (als Host)

Und hier ist der neue Code:
Quote:
;Script von Philipp Keil
;;HostHelper v0.8
;;;Garena autostart funktioniert nicht

#include <String.au3>
#include <file.au3>
#include <misc.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


HotKeySet ("{F5}", "StartCountdown")
HotKeySet ("{F6}", "StopCountdown")
HotKeySet ("{F7}", "Mode")
HotKeySet ("{F8}", "End")
$file = "daten.txt"
If FileReadLine ($file,1) = "" then
$name = Inputbox ("HostHelper","Dein Login Nick?")
$Pass = InputBoX ("HostHelper","dein Passwort?","","*")
$Pfad = InputBoX ("HostHelper","Pfad zur Garena.exe","C:\Programme\Garena")
$crypt_name =_StringEncrypt(1,$name,"946699")
$crypt_pass =_StringEncrypt(1,$Pass,"946699")
FileWrite ($file, "")
_FileWriteToLine ($file, 1, $crypt_name, 1)
_FileWriteToLine ($file, 2, $crypt_pass, 1)
_FileWriteToLine ($file, 3, $Pfad, 1)
EndIf
$crypt_name2 = FileReadLine ($file, 1)
$crypt_pass2 = FileReadLine ($file, 2)
$name2 =_StringEncrypt(0,$crypt_name2,"946699")
$pass2 =_StringEncrypt(0,$crypt_pass2,"946699")
$Pfad = FileReadLine ($file, 3)

#Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\philipp keil\desktop\hosthelper\hosthelpergui.kxf
$Form1_1 = GUICreate("HostHelper", 493, 413, 488, 177)
$HostHelperv0_9 = GUICtrlCreateLabel("HostHelperv0.9", 71, 16, 342, 60)
GUICtrlSetFont(-1, 30, 400, 0, "Arial Black")
GUICtrlSetColor(-1, 0x008080)
$Group1 = GUICtrlCreateGroup("Garena", 136, 144, 177, 233)
$Nick = GUICtrlCreateInput($name2, 152, 192, 121, 21)
$Nick_Name = GUICtrlCreateLabel("Nick Name", 152, 168, 69, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$Passwort = GUICtrlCreateLabel("Passwort", 152, 224, 60, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$Passwort1 = GUICtrlCreateInput("*******************", 152, 248, 121, 21)
$Pfad_zur_garena_exe = GUICtrlCreateLabel("Pfad zur garena.exe", 160, 296, 121, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$Pfad = GUICtrlCreateInput($pfad, 152, 320, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Start Tools", 56, 152, 75, 225, $WS_GROUP)
$Hotkeys = GUICtrlCreateLabel("Hotkeys:", 312, 152, 57, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$F5 = GUICtrlCreateLabel("Start Game = F5", 314, 176, 101, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$F7 = GUICtrlCreateLabel("Modeingabe = F7", 314, 200, 103, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$F8 = GUICtrlCreateLabel(" Beenden = F8", 311, 224, 88, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
$Modusangabe = GUICtrlCreateGroup("Modusangabe", 336, 280, 137, 97)
$mod1 = GUICtrlCreateInput("", 344, 336, 121, 21)
GUICtrlCreateLabel("Modus des Spiels?", 344, 312, 115, 19)
GUICtrlSetFont(-1, 8, 800, 0, "Arial Black")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1

if $mod1 = "1" then $mod1 = "APSO"
if $mod1 = "2" then $mod1 = "SDSO"

while 1
sleep (100)
WEnd

Func StartCountdown()
send ("MODE IS ")
send ("{enter}")
send ("-" & $mod1)
send ("{enter}")
sleep (5000)
send ("10")
send ("{enter}")
sleep (1000)
send ("9")
send ("{enter}")
sleep (1000)
send ("8")
send ("{enter}")
sleep (1000)
send ("7")
send ("{enter}")
sleep (1000)
send ("6")
send ("{enter}")
MouseMove (1110, 839)
MouseClick ( "left")
sleep (3800)
send ("{enter}")
EndFunc

Func StopCountdown()
while 1
sleep (100)
WEnd
EndFunc

while 1
sleep (100)
WEnd

Func Mode()
send ("{enter}")
send ("-" & $mod1)
send ("{enter}")
EndFunc

Func End()
Exit
EndFunc

Exit
EndSwitch
WEnd
Jetzt habe ich aber ein paar Probleme:

1. GelöstWenn ich ihm sage er soll Garena starten, dann macht er einfach garnichts.
Quote:
run ("garena.exe",$pfad2)
send ($name2)
send ("{TAB}")
send ($pass2)
send ("{enter}")
Die Variable ist in diesem Fall : C:\Programme\Garena

2.Gelöst Ich frage mich, ob autoIT erkennen kann, dass das Laden der Map abgeschlossen ist.
Ich hab mir gedacht solbald die Farbe eines bestimmten Pixels sich ändert, soll er den Mod eingeben, aber ich weiß nicht wie ich es schreiben soll. Viell. mit einer IF-Abfrage?

3. Kann autoIT erkennen, dass Spieler ins Spiel eingetreten sind und dann automatisch den Mode in den Chat schreiben?

4. GelöstWie ich es schreiben soll, dass wenn der User in der MessageBoX "Ja" gedrückt hat, er erst mit etwas anderem weiter machen soll?
So dachte ich es mir :
Quote:
msgBoX (4, "HostHelper", "Garena starten?")

If msgBoX = 8 then

run ("garena.exe",$pfad2)
send ($name2)
send ("{TAB}")
send ($pass2)
send ("{enter}")
EndFunc
Ich hoffe mir kann schnell jemand helfen, denn ich hab grad langeweile und brauch was zum denken.
MfG WaYnE
11/23/2009 15:44 Crrrespo#2
1)
Er findet die Exe nicht. Pack die garana.exe mal in den Ordner mit dem Script.

2)
[Only registered and activated users can see links. Click Here To Register...]

3) Versteh ich nicht. :/
11/23/2009 15:45 MoepMeep#3
Das ist nicht die autoit section. Und setz deinen 'code' gefälligst in code-tags.
11/23/2009 17:31 Shadow992#4
Quote:
Originally Posted by Crrrespo View Post
1)
Er findet die Exe nicht. Pack die garana.exe mal in den Ordner mit dem Script.

2)
[Only registered and activated users can see links. Click Here To Register...]

3) Versteh ich nicht. :/
1) Benutz statt Run(...) lieber ShellExecute(...)

2) [Only registered and activated users can see links. Click Here To Register...]

3) Klar gibt es möglichkeiten das zu verwirklichen ...
Z.B. mit Pixelsearch (auf deinem Nivaeu wird das aber nix und erst recht nix mit Memories , also schmink dir das erstmal ab :D)

Btw Ich hab auch Garena ;)
11/23/2009 20:59 Kazaaa#5
Quote:
Originally Posted by oOWaYnEOo View Post
3. Kann autoIT erkennen, dass Spieler ins Spiel eingetreten sind und dann automatisch den Mode in den Chat schreiben?
Code:
While 1 ; damit es nach dem ersten mal nicht aufhört
Do ;Tu folgendes:
$Suche = pixelgetcolor (xxx, yyy) ;Sucht die Pixelfarbe am Punkt xxx, yyy raus
sleep (150) ; "Schläft" 150 millisekunden, da sonst zu CPU-lastig
until $suche = 0x0000 (dein Farbwert) ;(tu folgendes:) bis deine suche den Farbwert 0x0000 hat
WEnd ; wegen While 1 nötig
€dit: den Code hab ich mir grad mal aus nem anderen Thread geklaut weil der Tab noch offen war :p
Damit solltest dir den "Checker" ob die Map geladen ist basteln können
11/23/2009 22:18 WieMeinen#6
Ok, schon mal ein großes Dankeschön an alle, die mir geantwortet haben.
@Shadow992: Es funktioniert jez mit "shellexecute"
Quote:
If $answer = 6 then
shellexecute ("garena.exe", "", "C:\Programme\Garena")
winwaitActive ("Login")
sleep (300)
send ($name2)
send ("{TAB}")
send ($pass2)
send ("{enter}")
EndIf
@Kazaaa: Muss er jedesmal neu den Punkt suchen?
Man könnte es doch auch so schreiben:
Quote:
$Suche = pixelgetcolor (xxx, yyy)
Do
sleep (100)
until $suche = 0x0000
WEnd
oder?
Egal, trotzdem dankeschön an alle die mir geholfen haben.
11/24/2009 12:24 AllesVergeben#7
Quote:
Originally Posted by oOWaYnEOo View Post
@Kazaaa: Muss er jedesmal neu den Punkt suchen?
Man könnte es doch auch so schreiben:

oder?
Egal, trotzdem dankeschön an alle die mir geholfen haben.
Nein, da es sonst nur einmal nach dem Pixel sucht und dann gleich in der Schleife hängt, wenn er den Pixel beim ersten mal nicht gefunden hat. Danach geht dann garnichts mehr, das heißt, dann kommt er nicht mehr aus der Do Until Schleife raus.

(Funktion Do Until ist eine Art Schleife, die ausgeführt wird, bis eine Bedingung erfüllt ist -> Wenn sie nie erfüllt wird, dann kein Ende)
11/24/2009 13:12 WieMeinen#8
So schlecht bin ich auch net, dass ich net weiß was eine Do until-Schleife ist.
Hab hier noch ne neue Frage, kann man Passwörter auch anders verschlüsseln als mit
"_StringEncrypt"?
Weil ich hab es jez so gemacht:
Quote:
If FileReadLine ($file,1) = "" then
$name = Inputbox ("HostHelper","Dein Login Nick?")
$Pass = InputBoX ("HostHelper","dein Passwort?","","*")
$crypt_name =_StringEncrypt(1,$name,"946699")
$crypt_pass =_StringEncrypt(1,$Pass,"946699")
FileWrite ($file, "")
_FileWriteToLine ($file, 1, $crypt_name, 1)
_FileWriteToLine ($file, 2, $crypt_pass, 1)
EndIf
Und wie kann ich die Farbe mit dem Windowinfo sehen, wenn ich das Spiel offen habe?
Es gibt leider keinen Fenstermodus.....
11/24/2009 13:17 Kazaaa#9
Quote:
Originally Posted by oOWaYnEOo View Post
Und wie kann ich die Farbe mit dem Windowinfo sehen, wenn ich das Spiel offen habe?
Es gibt leider keinen Fenstermodus.....
Strg+Alt+F sollte den Punkt den du mit der Maus angewählt hast freezen damit du ihn dann ausm WindowInfo auslesen kannst
11/26/2009 20:56 WieMeinen#10
Hi, so ich hab ne neue Frage, wenn man eine GUI macht und schreibt:
Quote:
$mod1 = GUICtrlCreateInput("Apso", 344, 336, 121, 21)
dann ist $mod1 nicht das in den Input eingetragene.
Wollte fragen, wie man es hinbekommt, dass $mod1 immer das ist, was eingetragen wird.
11/26/2009 23:55 Crrrespo#11
PHP Code:
$HELMK GUICtrlCreateInput("Beliebiger Text"1842803321)
send(GUICtrlRead($HELMK)) 
Bei mir wird "Beliebiger Text" gesendet. (ich hoffe das war es was du meinst :D)
11/27/2009 16:01 WieMeinen#12
Nicht ganz, also wenn man eine GUI hat und in der GUI was einträgt in die inputbox, dann auf den Startbutton geht und, dass dann später das was in input
stand gesendet wird.
Bei mir sendet er dann nur das was am Anfang drin stand. Also das Voreingestellte (in meinem Fall "Apso")
11/28/2009 22:51 WieMeinen#13
K, das Problem ist gelöst.

Jez muss ich nur rausfinden, wie das Tool erkennt, dass Spieler ins Spiel gejoint sind.

Also Pixelgetcolor funktioniert nicht, da sich nichts ändert außer dass der Name da steht.

Gibt es noch andere Möglichkeiten?