Current Memory Structure menu

User Tag List

Results 1 to 5 of 5
  1. #1
    capullo's Avatar Active Member
    Reputation
    184
    Join Date
    Oct 2007
    Posts
    86
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Current Memory Structure

    i stopped playing AoC, because funcom sucks.
    i started a bot but iam too lazy to finish it.

    here is a code snippet of my work (bad written c#, but it works *g*)
    it shows how to get all objects around the player
    you get the getOffset values from the xml
    all offsets are decimal.

    Code:
    int ptr = memory.ReadInteger(getOffset("basePTR"));
    endPTR = memory.ReadInteger(ptr + 0x4);
    int nextPTR = memory.ReadInteger(endPTR + 0x4);
    
    playerID = memory.ReadInteger(getOffset("playerPTR"));
    
    Stack pointerStack = new Stack(32);
    
    int lastPtr = 0;
    int ptrErr = 0;
    while (attached && running && memory.IsOpen)
    {
        byte[] isLastUnit = memory.ReadBuffer(nextPTR + getOffset("U_isLastUnit"), 1);
        if (isLastUnit[0] == 1)
        {
            if (pointerStack.Count > 0)
                nextPTR = (int)pointerStack.Pop();
            else
                break;
    
            continue;
        }
        int firstptr = memory.ReadInteger(nextPTR + getOffset("U_FirstPointer"));
        if (!pointerStack.Contains(firstptr))
            pointerStack.Push(firstptr);
    
            Units obj = null;
            if (objsByPtr.Contains(nextPTR))
            {
                obj = (Units)objsByPtr[nextPTR];
                if (!obj.Update())
                    obj = null;
            }
    
                            if (obj == null)
                            {
                                obj = new Units(nextPTR, this);
                                obj.Update();
                            }
                            int unitID = memory.ReadInteger(nextPTR + getOffset("U_UnitID"));
                            if (unitID == playerID)
                                globals.player = obj;
    
                            if (globals.player != null && unitID == globals.player.TargetID)
                            {
                                targetID = unitID;
                                globals.target = obj;
                            }
    
                            if (!byPtr.Contains(nextPTR))
                                byPtr.Add(nextPTR, obj);
                            if (!byId.Contains(obj.UnitID))
                                byId.Add(obj.UnitID, obj);
    
                            // Detect memory-loop
                            if (lastPtr == nextPTR)
                            {
                                ptrErr++;
                                if (ptrErr == 5)
                                    break;
                            }
                            else
                            {
                                lastPtr = nextPTR;
                                ptrErr = 0;
                            }
    
                            nextPTR = memory.ReadInteger(nextPTR + getOffset("U_SecondPointer"));
                        }
                        if (globals.player != null && globals.player.UnitID != playerID)
                            globals.player = null;
    
                        if (globals.target != null && globals.target.UnitID != targetID)
                            globals.target = null;
    
                        updateWait.Set();
                        Thread.Sleep(interval);
    here the xml with the offsets:
    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    <Offsets>
      <!-- Base + Player Pointer -->
      <Offset>
        <name>basePTR</name>
        <addr>20704240</addr>
      </Offset>
      <Offset>
        <name>playerPTR</name>
        <addr>34540152</addr>
      </Offset>
      <!-- Unit Offsets -->
      <Offset>
        <name>U_FirstPointer</name>
        <addr>0</addr>
      </Offset>
      <Offset>
        <name>U_SecondPointer</name>
        <addr>8</addr>
      </Offset>
      <Offset>
        <name>U_UnitID</name>
        <addr>12</addr>
      </Offset>
      <Offset>
        <name>U_UnitType</name>
        <addr>16</addr>
      </Offset>
      <Offset>
        <name>U_DataPTR</name>
        <addr>20</addr>
      </Offset>
      <Offset>
        <name>U_isLastUnit</name>
        <addr>25</addr>
      </Offset>
      <!-- UnitData Offsets -->
      <Offset>
        <name>D_PositionPTR</name>
        <addr>0</addr>
      </Offset>
      <Offset>
        <name>D_Combatstat</name>
        <addr>56</addr>
      </Offset>
      <Offset>
        <name>D_Weaponstat</name>
        <addr>304</addr>
      </Offset>
      <Offset>
        <name>D_ResourceName</name>
        <addr>360</addr>
      </Offset>
      <Offset>
        <name>D_Level</name>
        <addr>440</addr>
      </Offset>
      <Offset>
        <name>D_ResourcePercent</name>
        <addr>496</addr>
      </Offset>
      <Offset>
        <name>D_TargetID</name>
        <addr>5216</addr>
      </Offset>
      <Offset>
        <name>D_TargetType</name>
        <addr>5220</addr>
      </Offset>
      <Offset>
        <name>D_Name</name>
        <addr>5328</addr>
      </Offset>
      <Offset>
        <name>D_ObjectType</name>
        <addr>5348</addr>
      </Offset>
      <Offset>
        <name>D_isNPC</name>
        <addr>5556</addr>
      </Offset>
      <Offset>
        <name>D_maxHP</name>
        <addr>5724</addr>
      </Offset>
      <Offset>
        <name>D_HP</name>
        <addr>5728</addr>
      </Offset>
      <Offset>
        <name>D_Mana</name>
        <addr>5732</addr>
      </Offset>
      <Offset>
        <name>D_maxMana</name>
        <addr>5736</addr>
      </Offset>
      <Offset>
        <name>D_Stamina</name>
        <addr>5740</addr>
      </Offset>
      <Offset>
        <name>D_maxStamina</name>
        <addr>5744</addr>
      </Offset>
      <!-- Position Offsets -->
      <Offset>
        <name>P_XPos</name>
        <addr>0</addr>
      </Offset>
      <Offset>
        <name>P_ZPos</name>
        <addr>4</addr>
      </Offset>
      <Offset>
        <name>P_YPos</name>
        <addr>8</addr>
      </Offset>
      <Offset>
        <name>P_Heading</name>
        <addr>108</addr>
      </Offset>
      <Offset>
        <name>P_Heading2</name>
        <addr>116</addr>
      </Offset>
    </Offsets>

    Current Memory Structure
  2. #2
    capullo's Avatar Active Member
    Reputation
    184
    Join Date
    Oct 2007
    Posts
    86
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    i forgot the offset for the position pointer and for the pointer to the data of an object.

    Code:
                dataPTR = owner.Memory.ReadInteger(basePTR + owner.getOffset("U_DataPTR")) + 0x68;
                positionPTR = owner.Memory.ReadInteger(dataPTR + owner.getOffset("D_PositionPTR")) + 0x2C;

    with this data and understanding how it works, you can write your own memory based bot :P

  3. #3
    lopman's Avatar Member
    Reputation
    1
    Join Date
    Jul 2008
    Posts
    4
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Thks

    Thanks for your job.
    And Would you please tell us how to find the 'basePTR' And 'PlayerPTR'?

  4. #4
    capullo's Avatar Active Member
    Reputation
    184
    Join Date
    Oct 2007
    Posts
    86
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    for the initial addresses i got help from a friend.
    later you only need to search for a pattern in the assembly to find the base pointer.
    sometimes the offsets for some data changed but it should be easy to find with cheatengine the correct offset.

    i have only basic knowledge about assembly but its enough to find the right location.

    btw. the code base is from wow!sharp. its an open source wow bot and a good source to start with your own project.
    WoWSharp.NET: Home
    Last edited by capullo; 08-07-2008 at 04:20 AM.

  5. #5
    mosimo's Avatar Member
    Reputation
    2
    Join Date
    Jul 2008
    Posts
    46
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Awesome work, just curious if those are the correct offsets as of now so I know what I will need to look for to get new pointers after patches.

Similar Threads

  1. Memory read current game tick count
    By KillerJohn in forum Diablo 3 Memory Editing
    Replies: 2
    Last Post: 12-28-2012, 04:38 AM
  2. CMapChunk memory structure
    By Master674 in forum WoW Memory Editing
    Replies: 2
    Last Post: 08-20-2012, 10:12 AM
  3. what is different between Win 7 and XP about memory structure?
    By crazylzd in forum WoW Memory Editing
    Replies: 2
    Last Post: 02-26-2012, 05:34 PM
  4. need some help on finding memory stuff and check my current offsets
    By freitag in forum Age of Conan Exploits|Hacks
    Replies: 70
    Last Post: 11-21-2009, 02:56 PM
  5. WoW 3.1.0's New Memory Model Structure
    By UnknOwned in forum WoW Memory Editing
    Replies: 1
    Last Post: 04-19-2009, 06:33 AM
All times are GMT -5. The time now is 01:56 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search