Tratsch rund um Autoit / Autoit Talk | kleinere Fragen

05/22/2012 20:07 Dr.Toni-old#121
Hey alsooo :)

Wir haben jetzt die Alienschieß Funktion in unserem Bot soweit fertig... ;)

Nur das Problem ist das die Aliens sich bewegen... Hätte ihr eine Idee wie man hin bekommt das die trotzdem geklickt werden? :)
05/22/2012 20:48 mono0#122
Quote:
Originally Posted by Toni_Damager View Post
Hey alsooo :)

Wir haben jetzt die Alienschieß Funktion in unserem Bot soweit fertig... ;)

Nur das Problem ist das die Aliens sich bewegen... Hätte ihr eine Idee wie man hin bekommt das die trotzdem geklickt werden? :)
Falls es n Klickbot ist, Pixelsearch.
05/22/2012 21:05 Lawliet#123
Falls die Schiffe nur gerade aus fliegen, könnt ihr auch eine Funktion einbauen, die z.B. in einem Zeitabstand von 1 Sekunde zweimal die Farbe sucht = Richtung die es fliegt und die "Geschwindigkeit". Dann könnt ihr den nächsten Mausklick berechnen.
Geschwinfigkeit wäre:
√ [(x2 - x1) ² + (y2 - y1) ²] / Sekunde
Die Richtung könntet ihr über die Zwei Punkte Form berechnen.
05/22/2012 21:29 -STORM-#124
Code:
#include <_DLLFunctions.au3>
$enginedll = _DLL_LoadLibrary("C:\Program Files (x86)\PlayLC\Bin\Engine.dll")
$pnetworkaddress = _DLL_GetProcAddress($enginedll, "?_pNetwork@@3PAVCNetworkLibrary@@A")
Habe einen Weg gefunden, die Addresse eines Symbols/Threads (wie auch immer man es nennen will) innerhalb einer DLL zu finden.
Fragt mich nicht, wozu diese kryptische Zeichenfolgen, CE erkennt das schon wenn ich nur "_pNetwork" angebe, aber so funktioniert es.

Einziges Ärgernis: Jedes mal muss die DLL neu geladen werden, was ca. 5 Sekunden dauert. Da sie vom Spiel sowieso geladen ist, muss es doch einen einfacheren Weg des Zugriffs geben, als den Speicherort.
(Der Prozess des Spiels ist Nksp.exe)

Wie kann ich die Engine.dll in den GetProcAddress Befehl einbauen, ohne sie neu zu laden?

PS: Die UDF mit den Befehlen habe ich hierher:
[Only registered and activated users can see links. Click Here To Register...]
05/22/2012 21:35 xavartar#125
Ich hab ne frage wie kann ich normale Buttons Transparent machen das check ich ned
05/22/2012 23:10 Lawliet#126
Quote:
Originally Posted by -STORM- View Post
Code:
#include <_DLLFunctions.au3>
$enginedll = _DLL_LoadLibrary("C:\Program Files (x86)\PlayLC\Bin\Engine.dll")
$pnetworkaddress = _DLL_GetProcAddress($enginedll, "?_pNetwork@@3PAVCNetworkLibrary@@A")
Habe einen Weg gefunden, die Addresse eines Symbols/Threads (wie auch immer man es nennen will) innerhalb einer DLL zu finden.
Fragt mich nicht, wozu diese kryptische Zeichenfolgen, CE erkennt das schon wenn ich nur "_pNetwork" angebe, aber so funktioniert es.

Einziges Ärgernis: Jedes mal muss die DLL neu geladen werden, was ca. 5 Sekunden dauert. Da sie vom Spiel sowieso geladen ist, muss es doch einen einfacheren Weg des Zugriffs geben, als den Speicherort.
(Der Prozess des Spiels ist Nksp.exe)

Wie kann ich die Engine.dll in den GetProcAddress Befehl einbauen, ohne sie neu zu laden?

PS: Die UDF mit den Befehlen habe ich hierher:
[Only registered and activated users can see links. Click Here To Register...]
Stell mal bitte den Source der _DLL_LoadLibrary() Funktion hier rein :)
05/23/2012 08:19 xavartar#127
Hallo
ich hab eine frage

wie kann ich Meine Buttons Transparent machen oder die buttons ein bisschen durchsichtiger....

also auf dem Bild ist Button 100% da ich will sie ungefähr 50% runterdrehen

Wie geht das ???
05/23/2012 12:05 -STORM-#128
Quote:
Originally Posted by Lawliet! View Post
Stell mal bitte den Source der _DLL_LoadLibrary() Funktion hier rein :)
Code:
; ===================================================================================================================
; Func _DLL_LoadLibrary($sDLLName)
;
; Loads the DLL (loads it into memory or increments the DLL-load count)
;	NOTE: Certain DLL's are permanently 'loaded' for all Processes, and Loading/Freeing them has no effect
;	  other than getting their address. Examples: ntdll.dll, kernel32.dll, user32.dll, gdi32.dll (and others)
;
; $sDLLName = DLL file name. This doesn't need a full path if it included in the DLL search-path pattern,
;	otherwise a full pathname is required.
;
; Returns:
;	Success: handle to the DLL library
;	Failure: 0, with @error set:
;		@error = 1 = invalid parameter
;		@error = 2 = DLLCall error, with @extended = DLLCall error code (see AutoIT help)
;		@error = 3 = False/Failure returned from API called
;
; Author: Ascend4nt
; ===================================================================================================================

Func _DLL_LoadLibrary($sDLLName)
	If Not IsString($sDLLName) Then Return SetError(1,0,0)
	Local $aRet=DllCall($_COMMON_KERNEL32DLL,"handle","LoadLibraryW","wstr",$sDLLName)
	If @error Then Return SetError(2,@error,0)
	If Not $aRet[0] Then Return SetError(3,0,0)
;~  	ConsoleWrite("_DLL_LoadLibrary("&$sDLLName&") call succeeded, return: "&$aRet[0]&@CRLF)
	Return $aRet[0]
EndFunc
05/23/2012 13:51 Achat#129
Gibt es eigentlich eine Funktion, die den Zeitunterschied zwischen zwei Uhrzeiten (z.B. 23:00 und 03:45) berechnet?

MfG
05/23/2012 13:59 Freddy​#130
Ne glaube nicht aber das kannst du doch ganz einfach alleine machen mit @HOUR @SEC @MIN eventuell auch mit dem Datum.
05/23/2012 15:30 lolkop#131
Quote:
Originally Posted by Achat View Post
Gibt es eigentlich eine Funktion, die den Zeitunterschied zwischen zwei Uhrzeiten (z.B. 23:00 und 03:45) berechnet?

MfG
das ganze könnte man schön einfach iterativ lösen, wobei hierfür natürlich eine menge schritte notwendig wären:
Code:
$diff = Unterschied('23:00', '03:45')
ConsoleWrite($diff[0]&':'&$diff[1]&@CRLF)

Func Unterschied($anfang, $ende)
	Local $a = StringSplit($anfang, ':'), $b = StringSplit($ende, ':'), $return[2]=[0,0]
	While $a[1] <> $b[1]
		$a[1] = Mod($a[1]+1,24)
		$return[0]+=1
	WEnd
	While $a[2] <> $b[2]
		$a[2] = Mod($a[2]+1,60)
		$return[1]+=1
	WEnd
	Return $return
EndFunc
Edit:
die deutlich schönere variante würde natürlich so aussehen:
Code:
$diff = Unterschied('23:00', '03:45')
ConsoleWrite($diff&@CRLF)

Func Unterschied($anfang, $ende)
	Local $a=StringSplit($anfang, ':'), $b=StringSplit($ende, ':'), $return, $s1=$a[1]*60*60+$a[2]*60, $s2=$b[1]*60*60+$b[2]*60
	If $s2<$s1 Then Return (24*60*60-$s1)+$s2
	Return $s2-$s1
EndFunc
05/23/2012 19:15 -Solet-#132
Ich will folgendes machen: Ein bestimmter Pixel wird immer wieder gesucht und sobald er gefunden ist wird ein Doppelklick auf ihn getätigt, dann wird eine Pause von 50 Sekunden eingelegt, dann soll er wieder den Pixel suchen usw. Das ganze sieht jetzt also so aus:

Quote:
If IsArray($Sammeln) = True Then
MouseMove ($Sammeln [0], $Sammeln [1],1)
MouseClick ("Left",$Sammeln [0],$Sammeln [1],2,1)
Sleep (50000)
EndIf

So, jetzt will ich aber erreichen, dass, falls der gesuchte Pixel nicht vorhanden ist, der Bot automatisch in ein anderes Fenster wechselt um dort weiter nach dem Pixel zu suchen. Ich muss also praktisch sagen: Sobald er den Pixel nicht mehr findet soll er aus der Endlosschleife herraus "gehen", ein anderes Fenster anklicken und dort wieder in eine Endlossschleife hinein "gehen" und wieder nach dem Pixel suchen. Meine Frage lautet jetzt also wie ich aus der Endlos schleife hinaus bzw. wieder hinein kommen. Thx im Vorraus schonmal für jede hilfreiche Antwort:)
05/23/2012 19:22 Dr.Toni-old#133
Quote:
Originally Posted by Lawliet! View Post
Falls die Schiffe nur gerade aus fliegen, könnt ihr auch eine Funktion einbauen, die z.B. in einem Zeitabstand von 1 Sekunde zweimal die Farbe sucht = Richtung die es fliegt und die "Geschwindigkeit". Dann könnt ihr den nächsten Mausklick berechnen.
Geschwinfigkeit wäre:
√ [(x2 - x1) ² + (y2 - y1) ²] / Sekunde
Die Richtung könntet ihr über die Zwei Punkte Form berechnen.
Ich denke um darüber weiter zu reden ist Skype besser :)
05/23/2012 20:48 Achat#134
Quote:
Originally Posted by -Solet- View Post
Ich will folgendes machen: Ein bestimmter Pixel wird immer wieder gesucht und sobald er gefunden ist wird ein Doppelklick auf ihn getätigt, dann wird eine Pause von 50 Sekunden eingelegt, dann soll er wieder den Pixel suchen usw. Das ganze sieht jetzt also so aus:




So, jetzt will ich aber erreichen, dass, falls der gesuchte Pixel nicht vorhanden ist, der Bot automatisch in ein anderes Fenster wechselt um dort weiter nach dem Pixel zu suchen. Ich muss also praktisch sagen: Sobald er den Pixel nicht mehr findet soll er aus der Endlosschleife herraus "gehen", ein anderes Fenster anklicken und dort wieder in eine Endlossschleife hinein "gehen" und wieder nach dem Pixel suchen. Meine Frage lautet jetzt also wie ich aus der Endlos schleife hinaus bzw. wieder hinein kommen. Thx im Vorraus schonmal für jede hilfreiche Antwort:)
else

exitloop

Befehl mit Maus auswählen (in scite), F1 drücken => weitere Informationen ;)

MfG

PS. Willkommen! Viel Spaß auf epvp!

Edit: Code kommt in [code][/code], nicht in ein Zitat.
05/23/2012 21:03 -Solet-#135
Ah, okay, danke für die Hilfe und danke für den Willkommensgruß :)