Hilfe mit GWCA für blutigen Anfänger

02/25/2010 21:32 little nhm#31
BIn zwar kein Profi, aber ich würde den Button nich mit:
Quote:
If $Button1 Then
$sGW = "Guild Wars - " & GUICtrlRead($Input1)
GetID()
anschprechen, sondern mit:
Quote:
....
Case $Button1
GetID()
....
Dann ändere:
Quote:
Send($CBVar)
in
Quote:
Send($CBVar[0])
um.
Außerdem: Warum 2 GUIs? Und wo soll er die ID hinsenden? UNd du hast $sGw glaub ncih deklariert
02/26/2010 13:35 ¤Rikul¤#32
@nhm: Im Grunde hat er keine 2 GUI's da er keine Größenangabe bei $cGui angegeben hat. Die ID soll in den GW-Chat ausgegeben werden. $sGw hat er deklariert wie du hier sehen kannst:
Code:
$sGW = "Guild Wars - " & GUICtrlRead($Input1)
@Mora: Wäre glaub sinnvoller, wenn du die ID z.B. in eine MsgBox ausgeben würdest, oder wenn du es trotzdem im Guild Wars Chat haben willst, du das ganze mit ControlSend machst. Aussehen müsste das ganze dann so:
Code:
Func GetID()
	$cbType = "int"
	CmdCB($CA_TargetNearestAlly)
	Sleep(500)
	CmdCB($CA_GetCurrentTarget)
	Sleep(500)
	MsgBox ( 1, "ID", $CBVar[0])
EndFunc

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit ; praktischer wenn du das fenster wieder schließen möchtest
		Case $Button1
			$sGW = "Guild Wars - " & GUICtrlRead($Input1)
			GetID()
	EndSwitch
WEnd
02/26/2010 13:46 Na Mora#33
Wenn ich die Formulierung auf Select ändere, kann ich dann das so stehn lassn, mit "Case $Button1", sodass im Fall, dass Button1 gedrückt wird, GetID() ausgeführt wird?

wie kann ich ansonsten GWCA klar machen, dass das Fenstername nun "Guild Wars - [Charaktername]" ist? $sGW hab ich in einem anderen bot gefunden, der das genauso macht, und habe in dem restlichen skript nicht nochmal $sGW gefunden, also dachte ich, das sei eine Konstante aus der GWCAConstants.au3

Im Moment schaut mein Skript nun so aus:


Würde mich echt über Hilfe freun :)

/edit: thx an Rikul
Quote:
Case $GUI_EVENT_CLOSE
Exit ; praktischer wenn du das fenster wieder schließen möchtest
//edit: Bei aktuellem Skript immer noch kein Rückgabewert
02/26/2010 14:00 ¤Rikul¤#34
Joar, bei deinem Code musst du jetzt nurnoch:
Code:
Switch
zu
Code:
$nMsg = GUIGetMsg()
Switch $nMsg
umändern.

Edit: Ersetze $Form1 durch $cGui, damit du überhaupt mit GWCA in Verbindung stehst
02/26/2010 14:17 buFFy!#35
Quote:
Originally Posted by ¤Rikul¤ View Post
@nhm: Im Grunde hat er keine 2 GUI's da er keine Größenangabe bei $cGui angegeben hat.
Sinnlos? Weißt du überhaupt was GUICreate zurückgibt?
Lass dir den Wert mal ausgeben und dann behaupte das nochmal.

Er hat sehr Wohl 2 GUI's, er lässt das Eine nur nicht anzeigen - vorhanden ist Es trotzdem.
02/26/2010 14:55 ¤Rikul¤#36
Wenn man alles so genau nimmt hast du wohl recht, u-coRe. Doch es ist für das Auge nicht sichtbar. Und nur das wollte ich damit ausdrücken... deswegen auch "im Grunde".
02/26/2010 14:58 Na Mora#37
Ok, das neue Skript schaut nun so aus:


Wenn man nun aber in zB einem Außenposten auf "Get ID!" (/Button1) geht, dann öffnet sich zwar die MsgBox, allerdings wieder ohne inhalt! DLL ist immer injected vor jedem versuch (nur zur versicherung: 1. GW starten, 2. Injector starten und graphic.dll aus dem selben verzeichnis vom skirpt öffnen) und NPCs sind auch auf jeden fall vorhanden^^

Um die Frage um den Fensternamen abzuschließen, so, wie es zurzeit im Skript ist, sollte es doch funktionieren, dass das skript über GWCA mit Guild Wars kommunizieren kann, oder?

Wegen den 2 GUIs, da habe ich die 2. ohne Längenangaben noch aus google codes kopiert und für andre übungsbeispiele verwendet. als ich dann ne GUI für get ID machen wollte, hab ichs vergessen, die wieder rauszulöschen.

Danke an Rikul und little nhm für bisherige hilfe :handsdown: und an u-core für sein hinweiß auf die 2 GUIs ;)
02/26/2010 15:08 little nhm#38
Quote:
MsgBox(0,"ID", $CBVar[0]
Das $CBVar[0] bezieht sich auf
Quote:
CmdCB($CA_TargetNearestAlly)
Aber TargetNearestAlly tut, wie du hoffentlich übersetzten kanst, nur den nächsten Verbündeten Angreifen. Es hat gar kein Wert den es zurückgeben kann.
$CBVar[0] bezieht sich auf den 1. Befehl der mit CmdCB aufgerufen wird.
Du musst in
Quote:
$CBVar[1]
ändern.
$CBVar[0] bezieht sich auf den 1. CmdCB Befehl
$CBVar[1] auf den 2.
$CBVar[2] auf den 3.
usw.

Falls etwas fallsch ist, bitte melden. Aus Fehlern lernt man.
02/26/2010 15:12 Na Mora#39
ich probiers direkt mal aus, aber ich habe das mit den [0] und [1] usw so verstanden, dass manche befehle mehrere rückgabewerte haben und die damit ausgedrückt werden.

/edit
zunächst mal: weiß jemand, wann sich das GW-fenster zusätzlich nach dem charakternamen benennt? weil manchmal heißt es immernoch "Guild Wars", obwohl ich die dll injected hab.

@little nhm: habe das mit CBVar[1] mal ausprobiert (diesmal aus unerfindlichen gründen mit "Guild Wars - [Charaktername]) und in der MsgBox kam bei jedem Npc (also nicht nur bei einem die evtl mögliche) 0 zurück. hab das dann mal wieder umgeändert zu $VBCar[0] und schon bekam ich andere werte zurück, die richtig zu scheinen sind. Ich denke, das unterstreicht meine vermutung, dass die [0], [1] usw auf etwas anderes hinweißen (siehe oberer beitrag)! ;)

Wie schon oben gesagt, bleibt also nur noch die frage offen, wann sich das fenster immer nach den Charakternamen umnennt, auch, wenn man immer die dll injected. ich habe nicht immer die dll gleich nach dem doppelklick auf die GW.exe injected, spielt das evtl ne rolle?
02/26/2010 15:15 ¤Rikul¤#40
Hab im Script keinen Fehler gefunden, hab's auch getestet. Funktioniert bei mir einwandfrei. Es kann also nur an dir liegen.

@nhm: Soweit ich es verstanden habe ist es falsch, was du geschrieben hast. Manchmal gibt ein CA_Command 2 Werte aus. Erste Wert = $CBVar[0], zweite Wert = $CBVar[1].
02/26/2010 15:24 Na Mora#41
Quote:
Originally Posted by ¤Rikul¤ View Post
@nhm: Soweit ich es verstanden habe ist es falsch, was du geschrieben hast. Manchmal gibt ein CA_Command 2 Werte aus. Erste Wert = $CBVar[0], zweite Wert = $CBVar[1].
Siehe CA_GetCoords ;)

Dann besten Dank an euch beide, ich muss halt dann immer drauf achten, dass der fenstername auch so heißt wie mein char, dann funktionierts auch bei mir^^

//edit: wenn mir noch eine letzte frage erlaubt ist, ich habe jetzt ein skript gemacht, in dem man per knopf in der GUI zum NPC mit der ID 20 geht und dann durch den 2. knopf die ID von der zuletzt gedrückten dialogoption bekommt (also muss ich natürlich erst von hand eine drücken ;) ; die andren beiden buttons haben noch keine funktion)

Hier erstmal der code:
und nun meine frage, warum funktioniert die GoNpc-funktion und warum bekomme ich aber in der msgbox für getlastdialogid wieder nichts als rückgabewert? ich habe es auch schon mit $CBVar[0] statt $2 versucht, hat aber auch nicht geklappt (meiner meinung nach gehn auch beide, hab ich so in erinnerung)
02/26/2010 15:43 little nhm#42
Kein Problem, hat auch mir geholfen
02/26/2010 15:53 ddl#43
$2 = CmdCB($CA_GetLastDialogId)

CmdCB gibt immer nen Array zurück.

$2 = $2[0]
02/26/2010 15:56 Na Mora#44
dann müsste es so aussehen, versteh ich dich richtig?
Code:
	Case $Button2
		$2 = CmdCB($CA_GetLastDialogId)
		Sleep(100)
		MsgBox(0, " ", $2[0])
aber so, wies jetzt ist, kommt immer noch nix zurück, aber dann hätte es doch schon mit $CBVar[0] funktionieren müssen, oder?
02/26/2010 18:07 ¤Rikul¤#45
Klar funktioniert das so. $CBVar[0] hat DDL automatisch durch $2 deklariert. Dann musst du nur z.B. einen Quest annehmen und du kannst diesen Befehl nutzen. Dieser gibt dir dann die ID aus, welchen Button du beim Dialog gedrückt hast. Wenn du die Quest dann nochmal aufgibst, den NPC nochmal anredest und den Befehl CA_Dialog benutzt nimmt dein Charakter dadurch die Quest an.