Jump to content

Reading wowdata with nomandmemory


Recommended Posts

Heya. was trying to read data with nomandmemory. and i got this far:

#include <NomadMemory.au3> 
$ProcessID = WinGetProcess("World of Warcraft", "")
$memoryopen = _MemoryOpen($ProcessID)

i know it isnt long. but i dont know how i can read with

_MemoryRead()

and then output it.

i have used the search functions but :/ no results that helped me

Link to comment
Share on other sites

try to search the examples subforum there is a big thread about world of warcraft :) and i'm not sure about this but to my knoledge wow memory is blocked somehow ;)

Edited by alexmadman

Only two things are infinite, the universe and human stupidity, and i'm not sure about the former -Alber EinsteinPractice makes perfect! but nobody's perfect so why practice at all?http://forum.ambrozie.ro

Link to comment
Share on other sites

thanks ! how can they block reading memory ;S like all wow bots reads data.

ofc. i search *World of warcraft* then the search engine whines about *of* is to fking short. WHY?

Edited by tarre
Link to comment
Share on other sites

Because, bots are cheating and hacking, and the devolpers of this game do not want cheaters or hackers so they block the memory. Not all WoW bots use memory and they don't have to. In other words, I have no clue how to get it to read blocked memory nor do I think you should try to hack/cheat your way into a game, play it, the way it's supposted to be played.

Link to comment
Share on other sites

i dont wanna make a bot or so. just so i can read the Chatlog from wow to windows. so when i get a whisp or something it will tell me when im no inside the game. and btw!. i just learned i need an Memory editor to find an adress with an pointer. i got Artmoney but i dont know if it exis some better?, searched and found that nomad PDF or something like that was good.

Link to comment
Share on other sites

  • 1 month later...

Not all memory offsets are blocked by Warden. ArtMoney, CheatEngine, there are quite a few out there - also make sure to check out PermEdit.

Instead of messing with AutoIt for this, check out InnerSpace. There is already a script which will tell you if there is a tell from someone while you are afk.

Link to comment
Share on other sites

i dont wanna make a bot or so. just so i can read the Chatlog from wow to windows. so when i get a whisp or something it will tell me when im no inside the game. and btw!. i just learned i need an Memory editor to find an adress with an pointer. i got Artmoney but i dont know if it exis some better?, searched and found that nomad PDF or something like that was good.

If you are looking for a log parser, I've made this for LOTRO, it could be easily adapted to any game. I've trimed it down very quickly to just the log parsing functions.

#comments-start

 AutoIt Version: 3.1.0
 Title:         LOTRO Log parser and location Handler
 Author:        BotXPert <LOTROBot@gmail.com>
 
 Script Function:
    This script is a "starter" script for you to either insert or start your own script.  It contains functions that can be useful when creating your own LOTRO script.  These are the essential functions from my LOTROBot script.
    
Usage:
    Read what functions are available below.  Copy and paste your script between the ;STARTSCRIPTSTARTSCRIPT and the ;SCRIPTENDSCRIPTEND lines.  Or integrate the Global and variable definitions to your own script and make the subfunctions an include.  Write your script and call the premade functions to suit your needs
    
    
Functions:
    GetLastLine()
        Calling this function in your script will set the Global string variable $LastLine to the last line in the log file
    
        
Misc:
    If there is enough interest I can also add the following self explainatory functions: MoveToLoc($XPos, $YPos), CheckIfInCombat(), AquireTarget().  If you are looking for a premade travelbot, I'd try my LOTROBot on the TauntUnleashed forums.
     
#comments-end

Global $NameOfChatTab
Global $LastLine
Global $LastLineNumber
Global $PreviousFileLine
Global $Heading
Global $CurrentLogFile
Global $CurrentLine
Global $pid
Global $LocationPhrase
Global $TimeToPauseToWaitForLogWrite
Global $GetPositionDataTimer
Global $SendAndWaitForNewLineTimer

Opt("WinWaitDelay",0)
Opt("SendKeyDownDelay",30)

$CurrentLine = 1 ;Set First line of the log file to start on
$LOTROWindowName = "The Lord of the Rings Online"
$TimeToPauseToWaitForLogWrite = 500 ;Time to wait for the Log file to write before timing out

SetLogFile() ;Finds the most recent Log file in the My Documents\Lord of the Rings Online directory

;Type your Script in here   
;SCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTARTSCRIPTSTART






        ;Erase this next line once you figure things out
        msgbox(0x40000,"No Code","This script does nothing on its own. You must write some code. Exiting...")












;SCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTENDSCRIPTEND
Exit


;------------------------------------------------------------------------
Func SetLogFile()   
;When this function is called, it sets the Global variable $CurrentLogFile to the most up to date Log file name.  It does not return anything
While 1
    FileChangeDir(@MyDocumentsDir & "\The Lord of the Rings Online\")
    $TextFileBaseName = $NameOfChatTab & "_*.txt"
    $LogFile = -1
    While $LogFile = -1
        $LogFile = FileFindFirstFile($TextFileBaseName)
        IF $LogFile = -1 then
            IF msgbox(0x40005, "Start Logging", "You must start Chat logging on the LOTRO " & $NameOfChatTab & " Tab first.") = 2 then exit
        EndIf
    Wend

    ;Finds most recent file then makes sure it is the right one
    While 1
        ;Find most recent File
        $CurrentFile = FileFindNextFile($LogFile)
        If @error Then ExitLoop
        $CurrentLogFile = $CurrentFile
    Wend
    IF FileGetsize($CurrentLogFile) > 100000 Then
        IF msgbox(0x40004,"File very large","Press YES to delete file, no to parse anyway") = 6 then
            FileDelete($CurrentLogFile)
            sleep(100)
            SendWithOptions("{Enter}/say Log File Reinitialize{enter}",2,1)
            sleep(100)
            continueloop ;Restarts Function
        EndIf
    EndIf
    ;Most recent found set in $CurrentLogFile, if it doesn't have todays date ask for user input
    IF StringInStr($CurrentLogFile, $NameOfChatTab & "_" & @YEAR & @MON & @MDAY) = 0 Then
        $msg = msgbox(0x40006,"Possible error","The log file selected(" & $CurrentLogFile & ") does not have todays date." & @CR &"You may not have started logging.")
        Select
            Case $msg = 2
                Exit
            Case $msg = 11
                If msgbox(0x40004,"Possible error","Are you sure you want to continue?") = 7 then exit
                Return
            Case $msg = 10 
                ContinueLoop ;Restarts Function
        EndSelect
    EndIf
    
    Return ; Correct log file found and set in $CurrentLogFile variable
        
WEnd
EndFunc
;------------------------------------------------------------------------
Func GetCurrentLogFileLine()
GetLastLine()
$PreviousFileLine = $LastLineNumber
Return
EndFunc
;------------------------------------------------------------------------
Func WaitForNewLine()
    ;This function is called from the SendAndWaitForNewLine() function
    
    ;Usage:
    ;   Use GetCurrentLogFileLine() function before calling this function
    ;   Then send an input that sends text to window
    ;   Then call this function
    $LogFileWriteTimeout = Timerinit()
    While timerdiff($LogFileWriteTimeout) < $TimeToPauseToWaitForLogWrite
        GetLastLine()
        IF $LastLineNumber = $PreviousFileLine + 1 then ExitLoop
    WEnd
    
EndFunc
;------------------------------------------------------------------------
Func GetLastLine()
    ;Sets $LastLine(a string containing the text of the last line) to the Last Line of the file
    ;If the program just started type this to let the user know that he might have to wait
    ;As the log file gets over 100Kb this takes a non-conconsequential amount of time
    ;Loop Until the end of file is reached, while Setting Current
    ;Saves the $CurrentLine globally so it doesn't have the parse the entire file next time
    While 1
        $line = FileReadLine($CurrentLogFile, $CurrentLine)
        If @error = -1 Then ExitLoop
        $CurrentLine = $CurrentLine + 1
    Wend
    $LastLineNumber = $CurrentLine-1
    $LastLine = FileReadLine($CurrentLogFile, $LastLineNumber)

    
EndFunc
Link to comment
Share on other sites

Ok just had to post to correct a few stuffs :D .

First of all, there is no way any cheat engines can detect reading the memory of a process. It can't be done. HOWEVER, writting to memory is detectable. So again, reading = no problems.

Second, from all the testing I did, no regions in WoW memory are locked. I could however be wrong. If that's the case, make a call to VirtualProtect (http://msdn2.microsoft.com/en-us/library/aa366898(VS.85).aspx) with a DWORD flNewProtect value of PAGE_EXECUTE (0x10).

Lastly, your script BotXpert is indeed working for a LODRO, but WoW only writes its log files on log off, which means it keeps all text in a buffer and only writes on game exit/log. Again, that was like that a while ago and I can't test it atm, it might have changed however. To log chat, there are 3 possible ways:

- Reading from the chat buffer, but it's a DMA, so there's other ways to get base address every times, which might be too complicated for you.

- Packet parsing, again too hard.

- Reading from LOG file, best option if possible.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...