2 probleme im Script

07/21/2009 01:02 De Michel#1
hab leider zwei Probleme in meinem Script, evtl. kann mir ja einer von euch weiter helfen.

1. die identifizierung des 5. Slots.
2. Das Identkit im Hintergrund verschieben.

zu 1.)

$ident_x = 40
$ident_y = 285
$Slot1_x = 40
$Slot1_y = 80

For $iy = $Slot1_y To $Slot1_y + 140 Step 45
For $ix = $Slot1_x To $Slot1_x + 160 Step 40
also,X-Wert von :
Slot1 ist 40
Slot2 +40
Slot3 +80
Slot4 +120
und Slot5 +160
also müsste das doch eigentlich funktionieren..., der identifiziert aber nur von Slot1 bis 4. Hab auch schon mit +150, 155, 165, und 170 ausprobiert.

zu 2.)
MouseClickDrag("left",36,315,43,108)
funktioniert nur im aktiven Fenster,
aber wie geht das im Hintergrund ?

hier auch mal mein Script:

Gildenhalle : Insel des Zauberers
Skill 4 : Symbol des Zorns
Skill 5 : Gesegnetes Siegel
Steuerung : Inventar:Alle Taschen anzeigen = . (Punkt)

PHP Code:
#cs ----------------------------------------------------------------------------

AutoIt Version3.3.0.0
Author
Micha7

Script 
Function:
TQ Farmbot

#ce ----------------------------------------------------------------------------
#cs
Script Start Add your code below here
Opt
("CaretCoordMode"1) ;1=absolute0=relative
Opt
("ExpandEnvStrings"0) ;0=don't expand, 1=do expand
Opt("MouseClickDelay", 10) ;10 milliseconds
Opt("MouseClickDownDelay", 10) ;10 milliseconds
Opt("MouseClickDragDelay", 250) ;250 milliseconds
Opt("MouseCoordMode", 1) ;1=absolute, 0=relative
Opt("MustDeclareVars", 0) ;0=no, 1=require pre-declare
Opt("PixelCoordMode", 1) ;1=absolute, 0=relative
Opt("RunErrorsFatal", 1) ;1=fatal, 0=silent set @error
Opt("SendAttachMode", 0) ;0=don'
t attach1=do attach
Opt
("SendCapslockMode"1) ;1=store and restore0=don't
Opt("SendKeyDelay", 5) ;5 milliseconds
Opt("SendKeyDownDelay", 1) ;1 millisecond
Opt("TrayIconDebug", 0) ;0=no info, 1=debug line info
Opt("TrayIconHide", 0) ;0=show, 1=hide tray icon
Opt("WinWaitDelay", 250) ;250 milliseconds
Opt("WinDetectHiddenText", 0) ;0=don'
t detect1=do detect
Opt
("WinSearchChildren"1) ;0=no1=search children also
Opt
("WinTitleMatchMode"1) ;1=start2=subStr3=exact4=...
Opt("WinWaitDelay"250) ;250 milliseconds
#ce

Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)


WinWait("Guild Wars","")
If 
Not WinActive("Guild Wars",""Then WinActivate("Guild Wars","")
WinWaitActive("Guild Wars","")
WinMove("Guild Wars","",0,0,800,600)


;- 
START HOTKEY mit PAUSE Taste könnt ihr den bot Pausieren lassen
HotKeySet
("{PAUSE}""TogglePause")

Global 
$Paused


Func TogglePause
()
$Paused NOT $Paused
While $Paused
sleep
(100)
ToolTip('Der Bot wurde angehalten',0,0)
WEnd
ToolTip
("Der Bot wird wieder ausgeführt")
If 
Not WinActivate("Guild Wars"Then
WinActivate
("Guild Wars")
WinMove("Guild Wars","",0,0,800,600)
EndIf
Sleep(2000)
EndFunc
;- ENDE HOTKEY mit PAUSE Taste könnt ihr den bot Pausieren lassen

;- START HOTKEY mit Ende beendet ihr das Script
hotkeyset
("{End}""end")

func end()
Exit
EndFunc
;- ENDE HOTKEY mit Ende beendet ihr das Script

;-Start HOTKEY Stealth Modus
HotKeySet
("{PGUP}""stealth_on")
HotKeySet("{PGDN}""stealth_off")

Func stealth_on()
WinSetState("Guild Wars","",@SW_HIDE)
EndFunc

Func stealth_off
()
WinSetState("Guild Wars","",@SW_SHOW)
EndFunc
;-Ende HOTKEY Stealth Modus

Func _MakeLong
($LoWord$HiWord)
Return 
BitOR($HiWord 0x10000BitAND($LoWord0xFFFF))
EndFunc ;==>_MakeLong

Func _MouseClick
($hWnd$button$x$y$times 1$delay 15)
If 
$hWnd 0 Then
SetError
(-1)
Return
EndIf

Local $ix
Local $lParam 
_MakeLong($x$y)
Local $user32 DllOpen("user32.dll")

$button StringLower($button)

If 
$button "left" Then
For $ix 1 To $times
DllCall
($user32"int""PostMessage""hwnd"$hWnd"int"0x200"int"0"long"$lParam)
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x201"int"1"long"$lParam)
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x202"int"0"long"$lParam)
If 
$ix $times Then Sleep($delay)
Next
ElseIf $button "right" Then
For $ix 1 To $times
DllCall
($user32"int""PostMessage""hwnd"$hWnd"int"0x200"int"0"long"$lParam)
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x204"int"2"long"$lParam)
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x205"int"0"long"$lParam)

If 
$ix $times Then Sleep($delay)
Next
Else
SetError(-2)
If 
$user32 <> -1 Then DllClose($user32)
Return
EndIf
If 
$user32 <> -1 Then DllClose($user32)
EndFunc ;==>_MouseClick

$hWnd 
WinGetHandle("Guild Wars")

;-
Start Eingabe von /resign
Send
("{Enter}")
Sleep(1000)
Send("/resign")
Sleep(1000)
Send("{Enter}")
;-
Ende Eingabe von /resign

Sleep
(1000)

;-
Start Farmen

While 1


;-Start Normalmode to Hardmode befor run Bot
ControlClick
($hWnd,"","","left",1,657,50)
;-
Ende Normalmode to Hardmode befor run Bot

;-Start Weg aus Tquellen
Global $Runden 0
Do
$Runden $Runden 1
Sleep
(2000)
ControlSend($hWnd,"","","ö")
Sleep(500)
ControlSend($hWnd,"","","{SPACE}")
Sleep(9000)
ControlSend($hWnd,"","","{w down}")
Sleep(2200)
ControlSend($hWnd,"","","{d down}")
Sleep(900)
ControlSend($hWnd,"","","{d up}")
Sleep(4000)
ControlSend($hWnd,"","","{w up}")
Sleep(4000)
;-
Ende Weg aus Tquellen

;-Start Tquellen Kampf Script
ControlSend
($hWnd,"","","{e down}")
Sleep(1500)
ControlSend($hWnd,"","","{e up}")
Sleep(500)
ControlSend($hWnd,"","","8")
Sleep(2500)
ControlSend($hWnd,"","","7")
Sleep(2500)
ControlSend($hWnd,"","","5")
Sleep(2500)
ControlSend($hWnd,"","","6")
Sleep(4000)
ControlSend($hWnd,"","","{w down}")
Sleep(2500)
ControlSend($hWnd,"","","{w up}")
Sleep(4000)
ControlSend($hWnd,"","","5")
Sleep(2500)
ControlSend($hWnd,"","","1")
Sleep(800)
ControlSend($hWnd,"","","2")
Sleep(1200)
ControlSend($hWnd,"","","{w down}")
Sleep(6000)
ControlSend($hWnd,"","","{w up}")
Sleep(500)
ControlSend($hWnd,"","","2")
Sleep(1000)
ControlSend($hWnd,"","","3")
Sleep(2000)
ControlSend($hWnd,"","","1")
Sleep(600)
ControlSend($hWnd,"","","c")
Sleep(500)
ControlSend($hWnd,"","","{SPACE}")
Sleep(3000)
ControlSend($hWnd,"","","2")
Sleep(1500)
ControlSend($hWnd,"","","5")
Sleep(2500)
ControlSend($hWnd,"","","1")
Sleep(2000)
ControlSend($hWnd,"","","4")
Sleep(3000)
ControlSend($hWnd,"","","2")
Sleep(1500)
ControlSend($hWnd,"","","1")
Sleep(3000)
ControlSend($hWnd,"","","2")
Sleep(3000)
ControlSend($hWnd,"","","1")
Sleep(1500)
;-
Ende Tquellen Kmpf Script

;-Start Drop´s einsammeln
$Einsammeln 
0
Do
$Einsammeln $Einsammeln 1
ControlSend
($hWnd,"","","{ö}")
Sleep(500)
ControlSend($hWnd,"","","{SPACE}")
Sleep(1000)
Until $Einsammeln ;Anzahl für´s aufheben
;-Ende Drop´s einsammeln

;-Start /resign
ControlSend
($hWnd,"","","{Enter}")
Sleep(800)
ControlSend($hWnd,"","","{Up}")
Sleep(800)
ControlSend($hWnd,"","","{Enter}")
;-
Ende /resign

Sleep
(4000)

;-
Start In den Aussenposten reisen
ControlClick
($hWnd,"","","left",1,409,300)
Sleep(6000)
;-
Ende In den Aussenposten reisen

Until $Runden 
24 ;Anzahl der Runden
;-Ende Farmen

;-Start Reise zur Gildenhalle
ControlSend
($hWnd,"","","{g}")
Sleep(500)
ControlClick($hWnd,"","","left",1,281,55)
Sleep(8000)
;-
Ende Reise zur Gildenhalle

;-Start Identifizieren
Opt
("MouseClickDelay"100)

ControlSend($hWnd"""""{.}")
Sleep(500)
$ident_x 40
$ident_y 
285
$Slot1_x 
40
$Slot1_y 
80

For $iy $Slot1_y To $Slot1_y 140 Step 45
For $ix $Slot1_x To $Slot1_x 160 Step 40
ControlClick
($hWnd"""""left"2$ident_x$ident_y)
Sleep(300)
_MouseClick($hWnd"left"$ix$iy180)
Next
Next
ControlSend
($hWnd"""""{.}")
;-
Ende Identifizieren
Sleep
(600000)


;-
Start Weg zum Kaufmann
ControlSend
($hWnd,"","","{d down}")
Sleep(100)
ControlSend($hWnd,"","","{d up}")
ControlSend($hWnd,"","","{r}")
Sleep(4400)
ControlSend($hWnd,"","","{d down}")
Sleep(1000)
ControlSend($hWnd,"","","{d up}")
Sleep(2500)
ControlSend($hWnd,"","","{v}")
ControlSend($hWnd,"","","{space}")
Sleep(3000)
;-
Ende Weg zum Kaufmann

;-Start Verkaufen
ControlClick
($hWnd,"","","left",1,500,40)
For 
$verkaufen 1 To 20
ControlClick
($hWnd,"","","left",1,640,525)
Sleep(500)
Next
;-Ende Verkaufen


;-Start Identkit verkaufen und neues kaufen
MouseClickDrag
("left",36,315,43,108)
Sleep(1000)
ControlClick($hWnd,"","","left",1,500,40)
Sleep(1000)
ControlClick($hWnd,"","","left",1,640,525)
Sleep(1000)
ControlClick($hWnd,"","","left",1,426,40)
Sleep(1000)
ControlClick($hWnd,"","","left",2,472,230)
Sleep(1000)
MouseClickDrag("left",43,108,43,315)
;-
Ende Identkit verkaufen und neues kaufen

sleep
(2000)

;-
Start Weg zur Truhe
ControlSend
($hWnd,"","","{x}")
Sleep(1000)
ControlSend($hWnd,"","","{r}")
Sleep(3000)
ControlSend($hWnd,"","","{a down}")
Sleep(1550)
ControlSend($hWnd,"","","{a up}")
Sleep(5000)
ControlSend($hWnd,"","","{v}")
ControlSend($hWnd,"","","{Space}")
Sleep(3000)
;-
Ende Weg zur Truhe

;-Start Gold in die Truhe legen
ControlClick
($hWnd,"","","left",1,687,260)
Sleep(1000)
ControlClick($hWnd,"","","left",1,398,297)
Sleep(1000)
ControlClick($hWnd,"","","left",1,345,330)
Sleep(1000)
;-
Ende Gold in Truhe legen

;-Start Fenster schließen
For $Fensterschliessen 1 To 3
ControlSend
($hWnd,"","","{Esc}")
Sleep(500)
Next
;-Ende Fenster schließen

;-Start Verlassen der Gildenhalle
ControlSend
($hWnd,"","","{m}")
Sleep(2000)
ControlClick($hWnd,"","","left",1,630,550)
Sleep(7000)
;-
Ende Verlassen der Gildenhalle

WEnd 
08/02/2009 07:50 De Michel#2
Bleibt nur noch Punkt 2 übrig aber anscheinend kann mir hier keiner weiterhelfen.
Aber Danke.
08/02/2009 10:00 Frutex#3
Das sieht aber alles übel nach c&p aus...
Dann kann es auch nicht funktionieren..Lerne erstmal überhaupt draus einzelne Funktionen zu machen...
08/02/2009 10:49 De Michel#4
Ja, ist viel kopiert. Naja, eigentlich nur Funktion MakeLong und MouseClick, der rest ist schon auf meinem Mist gewachsen. Sieht halt sehr unübersichtlich aus. Aber ich weis auch schon nicht ob ich mit dem GUI oder mit dem Script selbst zuerst anfangen soll. Funktionen draus zu machen ist nicht das Problem. Die wiederrum vernünftig auf zu rufen dann schon eher. Ich hab keine oder zumindest nicht so viel Ahnung von AutoIt. Es gibt immer mehrere Möglichkeiten was zu erreichen und ich möchte erst testen bevor ich was so mache.
Von den ganzen Move To hab ich keinen Plan, kommt also erst evtl. viel, viel später.
Bis dahin muss der aber schon mal laufen um zu sehen wie er läuft und was geändert werden muss.
Mit dem Identen zum bsp. hab ich anders gemacht als Du mir mal gezeigt hast, auch wenn es hier noch so drin steht. Sieht zwar nicht so schön aus aber funktioniert.
Das größte Problem was ich hab ist das ich keinen kenne der mir mal was zeigen oder ausführlich erklären kann.
Und die erklärungen bzw. die Hilfe in AutoIt ist nicht schlecht aber es bleiben halt manchmal Fragen.
Hab im moment noch nen Bot für Holy-War angefangen, schon mit GUI und so; muss ich ja auch mal ausprobieren.
Aber da ich 4 Schicht arbeiten muss und mich um meine 11 Monate alte Tochter kümmern darf, hab ich zZ keine Zeit oder sehr wenig um mich intensiv damit zu beschäftigen.

Ich möchte keine Ideen, Progs, Scripts oder sonstiges klauen, kopieren um die dann zu verkaufen. Dafür gibt es bessere. Aber ich möchte nicht immer abhängig von anderen sein und warten müssen damit der Bot wieder läuft.
Sollte jetzt keine rechtfertigung sein aber als Info über meine Ansicht.

Und für jede Hilfe bin ich Sehr Dankbar.
08/02/2009 12:57 | Moep |#5
Identkit im Hintergrund verschieben wurde hier schonmal gelöst.
Dabei musst du nur deine _mouseklick func ein bisschen anpassen. Ich verrat dir mal was die einzelnen dll calls bezwecken:

- 0x200 move mouse
- 0x201 left down
- 0x202 left up
- 0x204 right down
- 0x205 right up
08/02/2009 13:23 De Michel#6
Da die Mouseclick Funktion nicht von mir ist, versteh ich da leider so gut wie nichts.
Ob mir dein Tip weiterhilft.. mal sehen aber vielen Dank erstmal.
Hab schon keine Ahnung was dllcalls sind. dll = irgend eine Datei ?
08/02/2009 14:26 Frutex#7
Also Dll Calls sind bestimmte Funktionen im Arbeitsspeicher die aufgerufen werden.
08/03/2009 07:42 De Michel#8
Hab mir das Stück nochmal angesehen und denke die Lösung gefunden zu haben.
Reicht das wenn ich hier in der Zeile die Delay Zeit änder ?
Func _MouseClick($hWnd, $button, $x, $y, $times = 1, $delay = 15)
Wenn ja, muss ich dann die Funktion nochmal neu mit geändertem Wert einfügen ?
(wegen dem MouseClick für´s Identifizieren)
oder macht das nichts wenn ich es in der einen Funktion änder ?
Wenn es nichts mit der Zeile zu tun haben sollte, kann es nur noch mit den 3 Zeilen für den linken Mausklick zu tun haben aber .... ich glaub nicht.
08/03/2009 17:55 | Moep |#9
Das delay ist die zeit zwischen zwei klicks.
Du willst aber etwas verschieben, der Ablauf davon ist also

mouse move
mouse down
mouse move
mouse up
..


edit: push the buttom if i helped u ;)
08/03/2009 19:52 De Michel#10
Achso...danke.
Heute mal kurz versucht, klappt noch nicht.
Dauert wohl noch was.
08/06/2009 11:19 buFFy!#11
Dynamic Link Library ? Wikipedia
In deinem Fall die "user32.dll"
08/08/2009 19:33 De Michel#12
Hmm, bin wohl zu blöd.
Hab´s mal so probiert aber klappt nicht.
PHP Code:
Func _MouseClick2($hWnd$button$x$y$times 1$delay 15)
    If 
$hWnd 0 Then
        SetError
(-1)
        Return
    EndIf

    
Local $ix
    Local $lParam 
_MakeLong($x$y)
    
Local $user32 DllOpen("user32.dll")

    
$button StringLower($button)

    If 
$button "left" Then
        
For $ix 1 To $times
            DllCall
($user32"int""PostMessage""hwnd"$hWnd"int"0x200"int"0"long"$lParam)
            
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x201"int"1"long"$lParam)
            
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x200"int"0"long"$lParam)
            
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x202"int"0"long"$lParam)
            If 
$ix $times Then Sleep($delay)
        
Next
    
ElseIf $button "right" Then
        
For $ix 1 To $times
            DllCall
($user32"int""PostMessage""hwnd"$hWnd"int"0x200"int"0"long"$lParam)
            
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x204"int"2"long"$lParam)
            
DllCall($user32"int""PostMessage""hwnd"$hWnd"int"0x205"int"0"long"$lParam)

            If 
$ix $times Then Sleep($delay)
        
Next
    
Else
        
SetError(-2)
        If 
$user32 <> -1 Then DllClose($user32)
        Return
    EndIf
    If 
$user32 <> -1 Then DllClose($user32)
EndFunc   ;==>_MouseClick2 
08/21/2009 19:35 De Michel#13
Kann man irgendwie sehen was in dieser dll-Datei drinsteht ?
08/21/2009 19:49 kknb#14
meinst du welche funktionen noch enthalten sind?

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

linke seite