Erste MemRead/Write Versuche =)

09/21/2010 19:11 .iArt#1
Hallo. Ich wollte aus WoW mal meine aktuellen Char namen auslesen. Und in einer MsgBox ausgeben. Allerdings gibt er immer nur einen komischen Zahlencode aus. Nun wollte ich fragen was nicht stimmt. Vllt kann ja einer von euch mir helfen. Die Offset habe ich aus MMO***. Und selber scuhen will ich eigentlich nicht man kann ja nicht mit CheatEngine in WoW aufm Offi einloggen oder?

Code:
#RequireAdmin
#include <NomadMemory.au3>
SetPrivilege("SeDebugPrivilege", 1)

While Not ProcessExists("Wow.exe")
Sleep(200)
WEnd

While 1
$ProcessID = ProcessExists("Wow.exe")
$Open = _memoryopen($ProcessID)
$Adresse = 0x00C79D18
$Read = _MemoryRead ($Adresse, $Open, 'dword') 
MsgBox (0, "WoW Realm", "Dein WoW Realm ist: " &$Read)
WEnd
09/21/2010 19:32 omer36#2
bin mir zwar nciht ganz sicher, aber aus 'dword' müsstest du 'char' oder so ähnlich machen, da du einen "namen" auslesen willst... oder?
09/21/2010 19:39 .iArt#3
Mit Char bekomm ich nur ein S statt vollen Namen =(
09/21/2010 19:42 omer36#4
aber der richtige buchstabe?

ja "char" war für ein buchstaben... es gab da noch was, was den ganzen "text" machen würde, aber fällt mir grade nicht ein .....

€versuchs mal mit "String"
09/21/2010 19:55 kknb#5
wchar[20]?

bitte.
09/21/2010 20:13 .iArt#6
mit char[20] gehts. Mit wchar kommen Chinesische Zeichen. Aber danke! muss ich das immer machen wenn ich ein "Namen" haben will?
09/21/2010 20:22 kknb#7
jop musst du. die zahl sind die anzahl der buchstaben die ausgelesen werden sollen.
09/22/2010 13:50 .iArt#8
So jetzt möchte ich gerne, dass er was startet wenn sich der Realm ändert. Also alle meine Chars sind ja auf dem selben Realm. und wenn sich dieser ändert, soll er das zwischen Do...Until machen. Aber irgendwie startet er da nichts. Hab ich das den richtig ausgegeben. Oder kann AutoIT es nicht erkennen wenn ich nach "Malfurion" suche?

Code:
;1718378829 <<--- Malfurion
#RequireAdmin
#include <NomadMemory.au3>
SetPrivilege("SeDebugPrivilege", 1)

While Not ProcessExists("Wow.exe")
Sleep(200)
WEnd

While 1
$ProcessID = ProcessExists("Wow.exe")
$Open = _memoryopen($ProcessID)
$Adresse = 0x00C79B9E
$Read = _MemoryRead ($Adresse, $Open, 'char[20]') 
    While $Read = "Malfurion"
        Sleep ( 200 )
    WEnd
    
    Do
        Send ("Hallo")
        $Read = _MemoryRead ($Adresse, $Open, 'char[20]' ) 
    Until = $Read = "Malfurion"
WEnd
edit: Der Sinn von dem ganzen ist, das wenn er einen Disco bekommt sich ja der Realm ändern müsste. Oder gibt es da ne Adresse zum checken ob ingame oder nicht?
09/22/2010 14:11 | Moep |#9
Quote:
Originally Posted by .iArt View Post
edit: Der Sinn von dem ganzen ist, das wenn er einen Disco bekommt sich ja der Realm ändern müsste. Oder gibt es da ne Adresse zum checken ob ingame oder nicht?
Ka kenn dat game net. Aber probier einfach mal ingame nach ner 1 zu suchen und z.B. im Loginscreen oder Charauswahl nach ner 0.

Dann kannst du den Code ungefähr so aufbauen (Pseudocode):

Code:
while 1
$inGame = MemoryRead()
if $inGame = 1 then
farmen()
elseif $inGame = 0 then
relogin()
endif
wend
Es kann auch sein das der Charauswahlbildschirm ne andere ID hat als der loginscreen. In manchen games poppt auch ne msgbox mit nen errorcode hoch, wenn du nen dc hast. Diese msgboxen haben auch meist eine eigene ID nach der du suchen kannst. Probier halt mal rum. Direkt nach den Namen zu suchen würd ich dir nicht empfehlen, da du mit 0,1,2,4,8 usw die meisten flags findest.
09/22/2010 14:33 lolkop#10
Quote:
Originally Posted by .iArt View Post
Code:
$Read = _MemoryRead ($Adresse, $Open, 'char[20]') 
While $Read = "Malfurion"
    Sleep ( 200 )
WEnd
du liest hier einmal die adresse ein, in der "Malfurion" steht. danach sleeps du unendlich lange... du checkst ja nichteinmal ob sich an dem inhalt der adresse etwas ändert.

der code ist gleichzusetzen mit diesem:
Code:
$a = True
while $a
    sleep(1000)
wend
das $a sich in dieser schleife niemals ändern kann, sollte wohl klar sein.
09/22/2010 14:51 .iArt#11
Quote:
Originally Posted by | Moep | View Post
Ka kenn dat game net. Aber probier einfach mal ingame nach ner 1 zu suchen und z.B. im Loginscreen oder Charauswahl nach ner 0.

Dann kannst du den Code ungefähr so aufbauen (Pseudocode):

Code:
while 1
$inGame = MemoryRead()
if $inGame = 1 then
farmen()
elseif $inGame = 0 then
relogin()
endif
wend
Es kann auch sein das der Charauswahlbildschirm ne andere ID hat als der loginscreen. In manchen games poppt auch ne msgbox mit nen errorcode hoch, wenn du nen dc hast. Diese msgboxen haben auch meist eine eigene ID nach der du suchen kannst. Probier halt mal rum. Direkt nach den Namen zu suchen würd ich dir nicht empfehlen, da du mit 0,1,2,4,8 usw die meisten flags findest.
Danek. mir gings garnicht um das suchen. Weiß garnicht ob man bei WoW mit CheatEngine suchen kann ( gibts da auch nen geheimtipp an Programm für soclhe Sucherein?). Nur mein Code funktionierte einfach nicht mit dem Do blabla. Deins mit IF etc klappt gut. Jetzt noch schauhen wo ich mehr Offsets finde die mir auch hlefen =)