Metin Wert einlesen

08/13/2010 13:33 Goxide#1
Hallo Com,
da ich mich schon ne Weile nicht mehr mit AutoIt beschäftigt habe, und jetzt wieder mal auf nem PServer zocke habe ich eine Frage bezügliche der Realisierung eine Switchbots.

Also ich will den DSS-Wert einlesen, vergleichen und je nach Ergebniss reagieren.
Das Switchen ist kein Problem, jedoch muss ich die ganze Zeit vorm PC sitzen und ggf. den Bot manuell beenden.

Ist es irgendwie möglcih den Dss-Wert meiner Waffe einzulesen?


Danke für die Antworten!
08/13/2010 15:16 bladerofdarknes#2
gibt es schon, die einzigste möglichkeit wäre es via imagesearch, ist aber ein langwirieger prozess bist du jeden einzelnen dss wert als image hast ;)
08/14/2010 14:52 Goxide#3
Keine Andere Alternative?
08/14/2010 15:14 ●ROBBY●#4
Per MemorySearch geht es vllt. auch bin mir aber nicht sicher. Probers einfach ml aus.
08/14/2010 16:11 bladerofdarknes#5
na da gab es glaub ich sogar mal nen tool um die items auszulesen aber wie man das tut und ob das beim dss wert geht weiß ich net
08/14/2010 16:28 Imaginär#6
Gibt eine möglichkeit per cheat engine. Aber man findet keine Pointer deshalb muss man man für jede Anwendung des Bot's neue adressen suchen.

und zwar so:


Mach immer so weiter und du hast irgendwann deine Adresse.

Die kannste dann halt wie du willst verarbeiten.

08/14/2010 16:49 bladerofdarknes#7
downtime ich glaube wenn er es mit imagesearch macht geht das einfacher oder?
08/14/2010 22:40 Goxide#8
Also ich habe einen ersten Prototyp, der jedoch nicht ganz funktioniert:confused:

Ich habe mir eine Methode mit MemoryRead überlegt.
Vorm Programmstart muss man manuell mit CE die Adresse des DSS-Wert einer Waffe auslesen. In CE habe ich beobachtet, das sich die Value ändert, sobald man switch und danach die Waffe anzieht.

Also: Ich ziehe das SwitchItem auf meine Waffe, zieh sie an, lese den Wert aus, überprüfe ihn, beende ggf, oder ziehe die Waffe wieder aus und beginne von vorne.

Soweit die Theorie. Jedoch habe ich Probleme beim Auslesen. Irgendwie wird der Wert nicht ausgelesen, oder nicht in der Variable gespeichert. Aufjedenfall ist die Überprüfung eigentlich für den A****. Stelle ich ein, dass das Programm bei einem DSS-Wert über 20 stoppen soll, tut es das einfach nicht, sondern switch einfach weiter.

Mein Quellcode:
Code:
HotKeySet("{F1}","starten")
HotKeySet("{F2}","beenden")
#RequireAdmin
#include <NomadMemory.au3>

SetPrivilege("SeDebugPrivilege", 1)

$Adresse = InputBox("Adresseneingabe", "Gib  hier bitte die Adresse deiner Waffe, die den DSS-Wert speichert ein. Wie du diese herausfindest sihee Anleitung!");Eingabe der 
;Adresse des DSS-Wertes

While Not ProcessExists("metin2client.bin"); Prozessname
Sleep(200)
WEnd

$open =  _MemoryOpen(ProcessExists("metin2client.bin"))

MsgBox(0,"Info","Bereit",5)

While 1
	Sleep(100)
WEnd


Func starten()
	While 1
	MouseClick("",684,293)
	MouseClick("",654,293)
	Sleep(500)
	MouseClick("right")
	Sleep(200)

	$Dss = _MemoryRead($Adresse,$open,"short")

If $Dss>20 And $Dss<100 Then ;Der Typ der Value ist unsigned, also werden -Dss zu Zahlen der Größenordnung von 65000.
	Exit
EndIf
Sleep(200)
MouseClick("right",655,97)
Sleep(200)
WEnd
EndFunc

Func beenden()
	Exit
EndFunc
Wie krieg ich es hin, das die Überprüfung funktioniert?:confused:

Danke
08/15/2010 14:38 Imaginär#9
Quote:
Originally Posted by metincheater :D View Post
Code:
HotKeySet("{F1}","starten")
HotKeySet("{F2}","beenden")
#RequireAdmin
#include <NomadMemory.au3>

SetPrivilege("SeDebugPrivilege", 1)

$Adresse = InputBox("Adresseneingabe", "Gib  hier bitte die Adresse deiner Waffe, die den DSS-Wert speichert ein. Wie du diese herausfindest sihee Anleitung!");Eingabe der 
;Adresse des DSS-Wertes

While Not ProcessExists("metin2client.bin"); Prozessname
Sleep(200)
WEnd

$open =  _MemoryOpen(ProcessExists("metin2client.bin"))

MsgBox(0,"Info","Bereit",5)

While 1
	Sleep(100)
WEnd


Func starten()
	While 1
	MouseClick("",684,293)
	MouseClick("",654,293)
	Sleep(500)
	MouseClick("right")
	Sleep(200)

	$Dss = _MemoryRead($Adresse,$open,"short")

If $Dss>20 And $Dss<100 Then ;Der Typ der Value ist unsigned, also werden -Dss zu Zahlen der Größenordnung von 65000.
	Exit
EndIf
Sleep(200)
MouseClick("right",655,97)
Sleep(200)
WEnd
EndFunc

Func beenden()
	Exit
EndFunc
Gibst du die Adresse auch mit einem "0x" an?
08/15/2010 15:03 Goxide#10
Quote:
Originally Posted by _DownTime View Post
Gibst du die Adresse auch mit einem "0x" an?
Hm... Bis jetzt nicht, doch als ichs jetzt probiert habe (mit 0x davor) gings tdm. nicht :confused:

€: Jetzt Funktioniert!

Dankesehr!
08/15/2010 15:11 bladerofdarknes#11
was für adressen benutzt du?
08/31/2010 05:00 CroSSiie#12
hallu =)
wieso nutzt du nicht einfach mein bot un ersprachst dir viiel viiel arbeit xD

wenn dir die arbeit trotzdem machen willst
dashier wird dir sicherlich helfen:

Brauchst 2 Memory Adressen pro Boni
1. Adresse Boniart (2 Byte)
2. Adresse Bonihöhe (Byte)

Dann brauchste den Pointer (dasfür hat CE ne nette Funktion die da zuverlässig funkt)
Wennde nachhder die Pointer "ansteuerst" vergess nicht das der Prozess mit in der Adresse steht =)

Bei weiteren Frage melde dich ^^