Channelwahl per Skript?

05/22/2011 14:29 auchegal#1
Hi,
ich würde gerne einen Bot bauen, der sich automatisch auf einem bestimmten Channel einloggt.
Spiel starten und einloggen ist ja kein Problem, aber die Channel und Charakterwahl kann man leider nicht per Tastatur Befehle machen.
Über Farbabfrage und Mauspositionen könnte ich es zwar machen, aber ich würde den Bot gerne im Hintergrund laufen lassen.
Hat jemand ne Idee, wie das funktioniert?
Die ganzen Bots, die zur Zeit im Spiel sind, müssen das ja auch irgendwie machen.
Ich schätze, die senden einfach das Datenpaket zum auswählen, weiß jemand, wie ich das machen kann (ohne Formica)?
05/22/2011 16:02 TheEvil²#2
Wenn du das komplett im Hintergrund haben willst, musst du das mit Packeten machen. Ich schätze mal das du AutoIt meinst, da kommste nicht weit damit. Musst dafür C++/C# etc. können
05/22/2011 22:15 Robin,249#3
Machs per Controlclick:
PHP Code:
Controlclick("NosTale","",0,"left",1,x,y) 
Der Nachteil ist, man muss ihn imer auf die Auflösung anpassen.
05/23/2011 19:51 auchegal#4
Das wär zu schön gewesen, wenn das funktionieren würde.
Irgendwie klickt der nicht bei controlclick

Habs mal mit Paint ausprobiert, er klickt einfach nicht.
Er aktiviert das richtige Fenster, liefert auch 1 zurück, also dass er geklickt hat, er tuts aber nicht.
Mach ich irgendwas falsch?

PHP Code:
WinActivate("Unbenannt")
ControlClick("Unbenannt","",0,"left",1,100,100)
Sleep(2000)
ControlClick("Unbenannt","",0,"left",1,50,50) 

@TheEvil²: gibts da irgendwo nen gutes Tutorial dafür?
05/23/2011 22:14 Robin,249#5
Die Maus bleibt wo sie ist. Bei mir funzt der.
Ich benutze den, um im NosBasar meine dinge raus zu nehmen.
Ich nehme einfach die normalen Koortinaten und mache Controlclick draus.
05/24/2011 10:07 auchegal#6
Jetzt weiß ich, wo das problem ist -.-
Die Channelauswahl akzeptiert nur klicks, wenn vorher der mouseover effekt aktiv ist.
Sprich, der Mauszeiger muss auf dem Channel sein, dann funktioniert auch der controlclick.
So ein mousemove kann man aber wahrscheinlich nicht im hintergrund setzen, oder?
:S
05/24/2011 10:31 PainToTheWorld#7
machs mit postmessage damit gehts und die auflösung ist egal und wo das fenster steht auch ist also besser und sicherer als controlclick
05/25/2011 23:31 auchegal#8
danke, ich schau mal, ob ich es damit irgendwie hin kriege.
wenn du näheres darüber weißt, oder mir beispiele schicken kannst, wär ich sehr dankbar :handsdown:
05/26/2011 10:08 PainToTheWorld#9
Code:
Func _MouseClick($hWnd, $sButton, $iX, $iY, $iClicks = 1)
	Local $vLong = BitOR($iY * 0x10000, BitAND($iX, 0xFFFF))
	Local $iButton = 0
	Local $aButton[2][3] = [[0x0001, 0x0201, 0x0202], [0x0002, 0x0204, 0x0205]]

	If Not IsHWnd($hWnd) Then $hWnd = WinGetHandle($hWnd)
	If StringLower($sButton) = "right" Then $iButton = 1

	For $i = 1 To $iClicks
		DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", 0x0200, "int", 0, "long", $vLong)
		DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $aButton[$iButton][1], "int", $aButton[$iButton][0], "long", $vLong)
		DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $aButton[$iButton][2], "int", 0, "long", $vLong)
	Next
EndFunc
05/27/2011 00:17 auchegal#10
Wow, vielen vielen vielen vielen dank :handsdown:
Funktioniert super , danke :D

(Kann geschlossen werden hier)