Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Skriptneuling bräuchte kurze Hilfe


  • Please log in to reply
23 replies to this topic
DESASTER75
  • Members
  • 15 posts
  • Last active:
  • Joined: 30 Oct 2014

Hi

 

Ich habe einen Satz: 'Ich habe es gelesen, jedoch nicht ganz verstanden und @ work keine Möglichkeit zum Test' vergessen zu schreiben. Dieser hätte das Ganze wohl aufeklärt. Bitte entschuldige. Ich bin ja echt froh über Deine Bemühungen mir das Thema ein wenig näherzubringen und mir zu helfen ...

 

Was ich bis jetzt erkenne/verstehe:

1) Du definierst Sprungmarken im ersten Block mit 'set_timer' auf die das Skript weiter hinten dann ständig springen kann in Verbindung mit den Tasten 1,2,3,4 und ESCAPE

 

2) Das mit den Tasten ALT/STRG/ESCAPE ist rafiniert jedoch erschließt sich mir noch ncht warum da ALT + STRG auch mit drin sind wenn da lediglich ESCAPE steht *confused*

 

3) Timeranschaltung auch soweit klar

3-1) Was ich jedoch nicht verstehe ist, dass hier mehrere Zeichen (q, p, 2) stehen, die, so sieht es für mich aus, gedrückt werden müssen, damit spam1, esc oder 2 ausgeführt werden

3-1-1) P und 2 sind bei meinem Sohn schon belegt und nur q steht zur freien Belegung zur Verfügung

3-2) Könnte man nicht ggf. ALLES mit einer Taste 'q' an- oder ausschalten (toggeln), also ...

 

q::

set_timer("D3_spam1", "toggle")

set_timer("D3_spam2", "toggle")

set_timer("D3_spam3", "toggle")

set_timer("D3_spam4", "toggle")

set_timer("D3_spamesc", "toggle")

return

 

-> Falls ich das falsch verstanden haben sollte korrigiere mich bitte

 

3-3) Das Letzte bei #ifwinactive mit der 2 habe ich nicht verstanden!

 

4) Das Dauerdrücken wird mit dem 'ifwinnotactive', wenn man das Spiel also beendet hat, ausgeschaltet. Script wird somit deaktiviert.

4-1) Das muss ich dann quasi auch für spam2, 3, 4 und das ALT/STRG/ESCAPE-Ding hier reinsetzen, richtig?

4-2) Wird das Skript, wenn man das Spiel verlässt, nicht automatisch beendet?

 

5) Der letzte Block, also das mit 'label, m, p = "" ...' erschließt sich mir gar nicht, also die Bedeutung

 

6) Wie kann man das mit der rechten Maus und dem Zeitintervall einfügen?

6-1) Ich brauche, wenn ich mir die 1,2,3 und 4 Dinger anschaue lediglich den 'Code' für die Nutzung der rechten Maus, dann denke ich bekomme ich das hin die rechte Maus da auch mit eingebaut zu bekommen

 

Ich danke

 

PS1: Ich werde Dein Skript @ home mal in der Urform testen

PS2: Nochmals dickes Danke für Deine Bemühungen und Deine Ratschläge und die super Erklärung in dem Codefenster



strobo
  • Members
  • 359 posts
  • Last active: Mar 10 2015 08:13 PM
  • Joined: 19 Jun 2012
Zu den Fragen und zum weiteren Ausbau des Skripts werde/kann ich erst kommen, wenn das (zu testende) Skript gut läuft bzw zum Laufen gebracht werden kann.

Es handelt sich dabei um ein Test Skript, deswegen wird z.b. Escape simuliert (p solls an und aus schalten können), weil man es wohl in jedem Spiel mit Sicherheit merkt, ob und wann es auf Escape reagiert.
Regards,
Babba

DESASTER75
  • Members
  • 15 posts
  • Last active:
  • Joined: 30 Oct 2014

Hallo!

Ich habe das Skript getestet.

 

Feedback hierzu:
- SPAM1 geht nicht -> Fehlermeldung das es ein unbekannter Befehl ist

 

Error: Call to nonexisten function.

Specifically: set_timer("D3_spam1", 60000)

 

Line#

009: set_timer("D3_spam1", 60000)

010: set_timer("D3_spam1", "off")

020: Return

031: Return

033: set_timer("D3_spam1", "toggle")

034: Return

041: if (set_timer("D3_spam1", "toggle") != "off")

041: {

 

The script was not reloaded; the old Version will remain in effect.

 

Weisst Du woran das liegt?

Thx



strobo
  • Members
  • 359 posts
  • Last active: Mar 10 2015 08:13 PM
  • Joined: 19 Jun 2012
Möglicherweise hast du das Skript nicht vollständig kopiert, der unterste Abschnitt beinhaltet die set_timer Definition, laut Error Meldung kann AHK diese nicht finden. Ich habe gerade eine Windows maschiene gefunden und das Skript (sollten so um die 120 Zeilen sein) ohne Fehler gestartet.
Regards,
Babba

DESASTER75
  • Members
  • 15 posts
  • Last active:
  • Joined: 30 Oct 2014

Hi!

Das Script aus Post #13 jetzt noch einmal kopiert und ein die AHK-Datei eingefügt! Script neu geladen, Diablo geöffnet, q gedrück, Nichts passiert. 2 gedrückt, Nichts passiert.

 

Ich weiss, dass wir erst einmal EINE Taste testen, aber auch die läuft nicht inGame.

 

 

--

Momentan habe ich das hier gebastelt (für einen Papa und den Stunden von Seiten im www):

 

'ifwinactive; Diablo III ahk_class D3 Main Window Class

 

q::

send1

while GetKeyState ("1","p")

{

send 1

sleep 60000

}

 

send2

while GetKeyState ("2","p")

{

send 2

sleep 40000

}

 

send3

while GetKeyState ("3","p")

{

send 3

sleep 15000

}

 

send4

while GetKeyState ("4","p")

{

send 4

sleep 200

}

 

return

#ifwinactive

 

---

 

Was hier absolut nicht passt, ist ...:
a) Ich muss 'q' die ganze Zeit gedrück halten

a-1) Ich bekomme 'q' nicht so eingestellt, dass durch 1x Druck das Script anfängt und bei erneutem Druck das Script beendet wird

 

B) ich bekomme das automatische Widerholen nach Zeit x der einzelnen Tasten nicht eingestellt

b-1) Das script soll ja nach Druck auf 'q' die Tasten 1-4 und rechte Maus drücken und dann nach den Abklingzeiten wieder, dann wieder, ...

 

c) ich bekomme die rechte Maustaste nicht rein

 

Gruß



strobo
  • Members
  • 359 posts
  • Last active: Mar 10 2015 08:13 PM
  • Joined: 19 Jun 2012

Ganz besonders der Test der p Taste wäre interessant gewesen, da sie Escape "wiederholt" und das vielleicht am ehesten ein erkennbares Feedback hat, zumindest wenn man nicht gerade im Hauptmenu ist.

Ich habe das Skript jetzt auch selbst mit Notepad (als Class) getestet, und es funktioniert zumindest dort. Vielleicht braucht Diablo längere Tastendrücke, dafür solltest du
; diese sendmodes kannst du einzelnd auch durchprobieren, d.h. ";" am zeilenanfang entfernen und script neu laden.
;sendmode, input
;sendmode, play

SetKeyDelay, , 100

ganz an den Anfang des Skriptes kopieren und nochmal testen.
Regards,
Babba

DESASTER75
  • Members
  • 15 posts
  • Last active:
  • Joined: 30 Oct 2014

Hi!

Habe ich gemacht!

 

SPAM1 geht gar nicht

SPAM2 geht, ich muss die Taste jedoch gedrückt halten

P (das mit ESC) gar keine Reaktion

 

Gruß



strobo
  • Members
  • 359 posts
  • Last active: Mar 10 2015 08:13 PM
  • Joined: 19 Jun 2012

Das ist schlecht.

Als Demo häng ich noch ein Skript an, welches, während Notepad (Editor) aktiv ist, die Taste 4 wiedeholt (Taste h schaltet die Wiederholung an und aus).
Auch in Diablo scheint (nachdem was du berichtest) schon fast zuviel zu funktionieren um letztendlich doch nicht zu funktionieren (mögliche tippfehler aus betrachtung ausgeschlossen).

Erstmal Tschüss und schade, dass es noch iwo hakt.

#singleinstance force
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; mit h kannst du einen timer während Notepad aktiv an und aus stellen.


; Label (Timer) Perioden hier festlegen:

set_timer("D3_spam1", 60000)
set_timer("D3_spam1", "off")
; jetzt weiss ahk welche periode der timer D3_spam1 haben soll. Das ist wichtig, da der timer nachher ohne Angabe der Periode an und aus gestellt werden soll!


set_timer("D3_spam2", 40000)
set_timer("D3_spam2", "off")
; Für den Fall man hat ein Label D3_spam2 und will es mit der Periode 40 sec anspringen.


set_timer("D3_spamesc", 5000)
set_timer("D3_spamesc", "off")
; nur zum testen.

set_timer("NP_spam4", 1000)
set_timer("NP_spam4", "off")
; nur zum testen.

; hier weitere Perioden festlegen...

return ; Ende der Auto Execution Section, die Skript-Start-Subroutine ist hier beendet.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hotkeys hierhin:

; Alt + Strg + Escape beendet das Skript.
!^escape::
	exitapp
return



#ifwinactive, ahk_class Notepad
h::
	set_timer("NP_spam4", "toggle")
return


#ifwinactive, Diablo III ahk_class D3 Main Window Class

q::
	; Der Timer, der zum Label D3_spam1 gehört, wird an bzw. aus geschaltet im Wechsel:
	set_timer("D3_spam1", "toggle")
return

p::
	set_timer("D3_spamesc", "toggle")
return

2::
	if (set_timer("D3_spam2", "toggle") != "off"){
		; wenn man den timer anmacht, soll auch gleich 2 gesendet werden:
		send 2
	}
return


#ifwinactive, anderer_Spiele_Title ahk_class andere_Spiele_Class

7::
	send 8
return

; weitere #ifwinactive ...


#ifwinactive

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Label hierhin:

; unteres D3_spam1 ist ein Label:

D3_spam1:
	ifwinnotactive, Diablo III ahk_class D3 Main Window Class
	{	
		; wenn das spiel nicht mehr aktiv ist, wird der Timer dieses Label
		; aus gestellt:
		set_timer("D3_spam1", "off")
		return
	}
	send 1
	
return

D3_spam2:
	ifwinnotactive, Diablo III ahk_class D3 Main Window Class
	{	
		set_timer("D3_spam2", "off")
		return
	}
	send 2
	
return


D3_spamesc:
	ifwinnotactive, Diablo III ahk_class D3 Main Window Class
	{	
		set_timer("D3_spamesc", "off")
		return
	}
	send {escape}
return

NP_spam4:
	ifwinnotactive, ahk_class Notepad
	{	
		set_timer("NP_spam4", "off")
		return
	}
	send 4
return

; Hier weitere Label, die (periodisch) angesprungen werden sollen.
; die label-Namen muss man sich selbst _ausdenken_, im obersten Teil des Skriptes werden
; die Perioden für die Labels festgelegt.


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


set_timer(label, m, p = ""){
	static a := {}
	if (!islabel(label)){
		msgbox, Das Label %label% existiert nicht. Anwendung wird geschlossen.
		exitapp
	}
	if (m = "toggle") {
		m := a[label]
		m := (m = "off" || m = "") ? "on" : "off"
	}
	a[label] := m
	settimer,% label,% m,% p
	return m
}


Regards,
Babba

DESASTER75
  • Members
  • 15 posts
  • Last active:
  • Joined: 30 Oct 2014

Hi!

 

Ich danke Dir schon einmal für Deine Mühe! Muss ich wohl weitersuchen und hoffen, dass ich irgendwann mal über ein Script stolbere für meinen Bub ...

 

DES75