|
You last visited: Today at 20:06
Advertisement
Reflex Shot Script
Discussion on Reflex Shot Script within the AutoIt forum part of the Coders Den category.
10/10/2011, 02:21
|
#1
|
elite*gold: 0
Join Date: Apr 2010
Posts: 6
Received Thanks: 0
|
Reflex Shot Script
Hallo. Ich bin neu hier und habe eine Frage. Ich denke es ist sehr leicht für euch, aber ich weiß halt einfach nicht die richtigen commands...
Das folgende AutoIt Script drückt die linke Maustaste sobald sich die Farbe des Pixels unter dem Mauszeiger ändert. Das ganze wird aktiviert wenn man "e" drückt.
Code:
HotKeySet("{e}", "AwpSchuss")
$GegnerErkannt = 0
while 1
WEnd
func AwpSchuss()
$GegnerErkannt = 0
$MousePos = MouseGetPos(10,10)
$MouseColor1 = PixelGetColor($MousePos[0],$MousePos[1])
While $GegnerErkannt = 0
Sleep(10)
$MouseColor2 = PixelGetColor($MousePos[0],$MousePos[1])
if $MouseColor2 <> $MouseColor1 Then
Sleep(10)
MouseClick("left")
$GegnerErkannt = 1
EndIf
WEnd
EndFunc
Part 1:
Nun will ich nicht nur den Pixel direkt unter meinem Mauszeiger scannen, sondern auch die 8 umliegenden Pixel (Quadrat aus 3 x 3, also insgesamt 9 Pixel scannen).
Wenn das nicht möglich ist oder es einfach nur zu schwer zum scripten ist, würde ich gerne den zu scannenden Pixel ändern. Nämlich um drei Pixel nach rechts und 3 Pixel nach unten vom Mauszeiger aus. Also dass das Script nichtmehr den Pixel direkt unterm Mauszeiger scannt, sondern den Pixel der sich drei Pixel vom Mauszeiger nach unten und nach rechts befindet. Ich denke da an sowas in der Art:
Code:
$MousePos = MouseGetPos(3,-3) ;Die 3 und -3 steht für die Verschiebung nach rechts und unten. Der Ausgangspunkt ist der Cursor.
;Das ist nur ein Beispiel von dem was ich meine. Es soll nur zum Verständnis dienen was ich haben will.
Part 2:
Ich möchte einen Toleranzwert festlegen können, ab wann das Script ausschlägt und sagt "Die Farbe in dem zu scannenden Pixel(n) hat sich geändert, *linksklick*.
Danke schonmal auf eure Hilfe!
|
|
|
10/10/2011, 13:22
|
#2
|
elite*gold: 0
Join Date: Oct 2010
Posts: 51
Received Thanks: 12
|
Code:
HotKeySet("{e}", "AwpSchuss")
$GegnerErkannt = 0
while 1
;evlt ein sleep(...) einbauen, damit weniger CPU auslastung
WEnd
func AwpSchuss()
$GegnerErkannt = 0
$MousePos = MouseGetPos(10,10)
$MouseColor1 = PixelGetColor($MousePos[0],$MousePos[1])
While $GegnerErkannt = 0
Sleep(10) ;hier evtl störend, da schnelle Reaktion nötig?
$MouseColor2 = PixelGetColor($MousePos[0],$MousePos[1])
if $MouseColor2 <> $MouseColor1 Then
Sleep(10) ;hier auch, soll ja sofort schießen, oder nicht?
MouseClick("left")
$GegnerErkannt = 1
EndIf
WEnd
EndFunc
Du vergleichst ja nur den Farbwert von vor 10 ms mit dem jetzigen, dass heißt aber doch nicht, dass da ein Gegner stehen muss? Ich denke heutzutage sind die Spiele alle voller Texturen so dass sich die Farbe hinter der Maus andauernd ändert?
Wäre es an der Stelle nicht viel sinnvoller, direkt die Farbe eines Gegners mit einzubringen und wenn sich die Farbe auf die eines Gegners ändert, dann zu schießen?
Aber zu Part 1
Du Scannst ja nicht, du fragst nur die Farbe eines Pixels ab. Du kannst das, wenn du es nicht mit der Farbe eines Gegners machen willst wie beschrieben, natürlich 9 mal machen und damit die komplette Fläche (3x3) haben. Dazu könnten dir auch Arrays dienlich sein.
Um den zu scannenden Pixel zu ändern, musst du einfach zu MousePos[0] und MousePos[1] die entsprechenden Werte dazu addieren. Dies kannst du extra machen oder direkt bei PixelGetColor:
Code:
PixelGetColor(MousePos[0] + 3, MousePos[1] + 3)
Um einen Toleranzwert dort Festzulegen, müsstest du einen Umweg machen:
Farben im Feld einlesen - kein Problem
Jetzt kommt Pixelsearch, du musst in dem Feld 1x1 nach der Farbe von Koord 1x1 suchen, bei Pixelsearch kann man Toleranzen angeben. den Wert setzt du auf $iwas1
Das ganze kommt noch achtmal, für jede Koordinate. am ende hast du dann $iwas1 - 9
Jetzt kannst du schreiben:
Code:
If $iwas1 = MouseColor1 AND $iwas2 = MouseColor2 .........
Und hast es damit. Ist aber sehr umständlich und lindert die Scriptgeschwindigkeit (merkt man aber evtl auch nicht..)
Wie schon gesagt, wenn du lieber die Farbe mit der eines Gegners vergleichst geht es evtl besser
|
|
|
10/10/2011, 15:47
|
#3
|
elite*gold: 0
Join Date: Apr 2010
Posts: 6
Received Thanks: 0
|
Hi, Danke für deine schnelle Antwort:
Also ich möchte einfach nur das Script benutzen wenn ich z.B. hinter einer Ecke warte (sei es mit ner Pistole oder ner Sniper), ich aktiviere es einfach mit nem klick auf die Taste "e" und darf mich dann halt nicht bewegen
Die Farbe der Gegner ist total unterschiedlich, selbst mit "rot/grün" Models da Schatten die Farbwerte ändern, mir kommts aber auch drauf an das Script ohne extra Models benutzen zu können, ich will es ja nur in manchen Fällen (wenn ich es brauche) grad aktivieren (und mich dann nicht bewegen).
Das folgende funktioniert nicht so recht.
Code:
PixelGetColor(MousePos[0] + 3, MousePos[1] + 3)
Quote:
Originally Posted by klavier22
Und hast es damit. Ist aber sehr umständlich und lindert die Scriptgeschwindigkeit (merkt man aber evtl auch nicht..)
|
Hängt das von der Rechenleistung ab? Von der hätte ich genügend..
Könntest du in das Script eine Toleranz einbauen für den einen verschobenen Pixel?
Das heißt es reicht mir jetzt einer (1x1). Aber der müsste dann mit deiner Methode wiegesagt 3 Pixel nach rechts und 3 Pixel nach unten von der "MousePos".
 ) Danke schonmal für deinen Post davor.
|
|
|
10/10/2011, 16:07
|
#4
|
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
|
könntest du zb auch mit PixelChecksum() machen
PHP Code:
HotKeySet("{e}", "AwpSchuss")
While Sleep(50) WEnd
Func AwpSchuss()
$pos = MouseGetPos() $checksum = PixelChecksum($pos[0], $pos[1], $pos[0]+3, $pos[1]+3)
While $checksum = PixelChecksum($pos[0], $pos[1], $pos[0]+3, $pos[1]+3) Sleep(100) WEnd
MsgBox(0, "", "Peng!") Exit EndFunc
|
|
|
10/10/2011, 16:47
|
#5
|
elite*gold: 0
Join Date: Oct 2010
Posts: 51
Received Thanks: 12
|
While Sleep(50)
WEnd
das geht?
Ansonsten ist omers Variante natürlich dann die beste für dich.
|
|
|
10/10/2011, 17:29
|
#6
|
elite*gold: 52
Join Date: Oct 2010
Posts: 1,998
Received Thanks: 389
|
Klar geht While Sleep(50)
Das Script pausiert für 50 ms und Sleep returnt dann 1. Sprich While 1 nur eben, dass das Sleep schon ein Parameter von While ist.
|
|
|
10/10/2011, 18:22
|
#7
|
elite*gold: 0
Join Date: Oct 2010
Posts: 51
Received Thanks: 12
|
ach so
|
|
|
10/11/2011, 05:50
|
#8
|
elite*gold: 0
Join Date: Apr 2010
Posts: 6
Received Thanks: 0
|
Ooops
Ich hätte einfach die Leerzeichen streichen müssen^^ Das is mir jetzt peinlich  Nagut, danke beide Scripts Varianten gehen jetzt.
Code:
PixelGetColor(MousePos[0] + 3, MousePos[1] + 3)
So verschwindet die Error Meldung:
Code:
PixelGetColor(MousePos[0]+3, MousePos[1]+3)
Gut für alle anderen die vielleicht noch dieses Script brauchen,
hier Variante 1 von klavier22:
Code:
HotKeySet("{t}", "AwpSchuss")
$GegnerErkannt = 0
while 1
WEnd
func AwpSchuss()
$GegnerErkannt = 0
$MousePos = MouseGetPos()
$MouseColor1 = PixelGetColor($MousePos[0]+3,$MousePos[1]+3)
While $GegnerErkannt = 0
Sleep(10)
$MouseColor2 = PixelGetColor($MousePos[0]+3,$MousePos[1]+3)
if $MouseColor2 <> $MouseColor1 Then
Sleep(10)
MouseClick("left")
$GegnerErkannt = 1
EndIf
WEnd
EndFunc
Und hier Variante 2 von omer36:
Code:
HotKeySet("{t}", "AwpSchuss")
While Sleep(10)
WEnd
Func AwpSchuss()
$pos = MouseGetPos()
$checksum = PixelChecksum($pos[0], $pos[1], $pos[0]+3, $pos[1]+3)
While $checksum = PixelChecksum($pos[0], $pos[1], $pos[0]+3, $pos[1]+3)
Sleep(10)
WEnd
MouseClick("left")
EndFunc
Wie geht das mit Pixelsearch und dem Tolerenzwert? Zuviel arbeit? Würde mir auch für einen Pixel reichen, nur müsste ich wissen wie ich es in das Script einbaue so das auch der Verschobene Pixel genommen wird und nicht direkt der Mauszeiger... :?
Dann muss ich noch meine Wut abflamen übers AutoIt Forum:
(Achtung is wirklich nur geflame und eher Off-Topic  )
Im AutoIt Forum (direkt auf der Software Homepage von denen) habe ich diesselbe Frage gestellt und wisst ihr wie ich behandelt wurdet?
Da ich neuer Member war (grad angemeldet) hatte ich keinerlei Rechte (?, hier hab ich doch auch wie jeder andere Rechte ein neues Topic zu eröffnen..). Dort konnte ich jedenfalls nur in 2 Topics posten. Gut 50/50 Chance das erste genommen. Ich werde von einem grimmigen Stammmember angeschnauzt ich solle doch gerne woanders ein neues Topic eröffnen und wäre ein Idiot weil ich ins falsche Topic poste (wohin denn, wenn neue Member keine Permission haben), dann schlossen sich noch 2 andere User an und meinten doch wie ich mich in dem Forum schon unbeliebt machen würde und sie mir wünschen das ich gebannt werde... (wegen was denn :?)
Nagut, habe dann noch einen dritten Forumbereich gefunden indem ich als neuer Member posten darf und der Themenbereich einigermaßen passte. Anstatt mir einfach ne Antwort auf meine Frage zu geben werde ich weiter angeschnauzt ich habe die Forumregeln missachtet (neue Member dürfen wohl nicht 2 Topics an einem Tag eröffnen...  o ?)
So genug Off-Topic dazu, musste es einfach loswerden, vllt liest das mal jemand der auch auf der AutoIt Seite die Schnau*e voll hat ;b
Da freu ich mich so riesig das ich dieses Forum hier kennengelernt hab, da bekommt man wenigstens ne Lösung und noch 3 Leute die sich damit auskennen, Thanks!!
Da jetzt noch ne Toleranz einzubauen bzw mir das zu erklären
|
|
|
10/11/2011, 06:08
|
#9
|
elite*gold: 52
Join Date: Oct 2010
Posts: 1,998
Received Thanks: 389
|
Du scanst doch einen Bereich, in dem er nach veränderungen sucht. Du suchst also nicht nur da, wo dein Mauszeiger ist sondern auch die 3 Felder rechts und unten drunter.
Wenn du einen Toleranzwert benutzen willst musst du Pixelsearch benutzen, weil PixelChecksum ja überprüft, ob sich etwas geändert hat und wenn sich etwas ändert ändert sich nunmal was. Da braucht man keine Toleranz^^
|
|
|
10/11/2011, 13:40
|
#10
|
elite*gold: 0
Join Date: Oct 2010
Posts: 51
Received Thanks: 12
|
kannst meine rausnehmen, omers ist viel besser, da sie:
1. kürzer (also weniger Code) ist für den gleichen Effekt
2. das Feld von Mauszeiger bis Mauszeiger +3 "absucht" - meiner "sucht" ja nur auf dem Punkt Mauszeiger +3
|
|
|
All times are GMT +1. The time now is 20:06.
|
|