Question about obtaining values from ePlayerFields menu

User Tag List

Results 1 to 11 of 11
  1. #1
    Envoke's Avatar Contributor
    Reputation
    105
    Join Date
    Jan 2009
    Posts
    201
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question about obtaining values from ePlayerFields

    I have used search and looked around on google for some solutions but couldn't find anything. I have been able to get any of the values in eUnitFields, but I'm not sure on how access to the other enum tables works. For the UnitField I am doing

    ObjectManager = [Base]+ [CurMgrOffset = 0x463C]

    then for my local guid i do
    LocalGuid = [ObjectManager] + [LocalGUID = 0xC8]

    I loop through the objects until I find the one matching my players guid. then from there I am able to get the eUnitFields like health, mana, ect, but how do I access other values?
    Like say I wanted to see the PLAYERS_XP that is in the ePlayerFields, or say I wanted to get the GameObjects display ID in eGameObjectFields, how do you access the others enum values once you have the ObjectManager?

    I get the players health/ect like this

    CurrentObject = ObjectManager + FirstObject
    //loop thru the values until I get mine
    Players_HP = [CurrentObject + UNIT_DESC = 0xC] + UNIT_FIELD_HEALTH = 0x20 + 0x12 * 4

    Hopefully you understand what I wrote lol. Thanks for any replies in advance I would really like to have a better understanding on this.

    Question about obtaining values from ePlayerFields
  2. #2
    romb0t's Avatar Member
    Reputation
    79
    Join Date
    Dec 2011
    Posts
    212
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    At least, I would read this post (Descriptors)

    Here is the hierarchy of the objects to get the descriptors:
    Code:
    CGObject_C----> CGItem_C --> CGContainer_C 
              \---> CGUnit_C --> CGPlayer_C 
               \--> CGGameObject_C 
                \-> CGDynamicObject_C 
                 \> CGCorpse_C
    It is why CGItem first descriptor is at CGObject_C.lastDescriptor+4 and CGContainer_C first descriptor is at CGItem_C.lastDescriptor+4

    Now you should understand why you add 0x20...
    Last edited by romb0t; 05-16-2012 at 08:34 AM.

  3. #3
    Envoke's Avatar Contributor
    Reputation
    105
    Join Date
    Jan 2009
    Posts
    201
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I read the post you linked. In his example he read the PLAYER field with no change as if he was reading the UNIT fields so I didn't really get much from this

    Code:
    DWORD holder = ReadMem(objBase+0x08);
    u_int MAXLEVEL = ReadMem(holder+(PLAYER_FIELD_MAX_LEVEL*4));
    Code:
    DWORD holder = ReadMem(objBase+0x08);
    u_int HP = ReadMem(holder+(UNIT_FIELD_HEALTH*4));
    I'm not really sure why I add the 0x20 I guess this is linking to the UNIT field? I was searching through posts and I came across someone doing the values like that so I modified my code to also add the 0x20. I am getting the health, mana, really anything in the UNIT field by just doing 0x20 + VALUE * 4

    Here is part of my code...
    Code:
                                ReadProcessMemory(WoWHandle, CurrentObject + (uint)WOW401.UNIT_DESC, buffer, buffer.Length, out o);
                                uint CurrentObjectDescriptor = BitConverter.ToUInt32(buffer, 0);
    
                                 //I can change the WOW401. to any UNIT descr and it gets the value but if I repeat the same procedure for the PLAYER it doesnt 
                                 // return anything
    
                                ReadProcessMemory(WoWHandle, CurrentObjectDescriptor + (uint)WOW401.PLAYER_MAX_LEVEL, buffer, buffer.Length, out o);
                                uint CurrentObjectValue = BitConverter.ToUInt32(buffer, 0);
    
                                MessageBox.Show("Current Value: " + CurrentObjectHP.ToString());
    I see the hierarchy you posted and I understand I'm trying to reach CurrentObject->Unit->Player->Value so I believe I am just missing something to add to the value?
    Last edited by Envoke; 05-16-2012 at 12:09 PM.

  4. #4
    romb0t's Avatar Member
    Reputation
    79
    Join Date
    Dec 2011
    Posts
    212
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    So from the dump thread for 4.3.4_15595 ([WoW][4.3.4.15595] Info Dump Thread) (but did not change from previous 4.x) for BaseObject , the latest property is at 0x1c meaning that the first Unit specific property is at 0x20 and the last Unit specific property is at 0x20+0x224 meaning the first Player specific property is at 0x248. For the XP property, it should be 0x248+0x790.

    So if CurrentObject represents a player object, you will access to XP by doing:
    [[CurrentObject + 0xc]+0x248+0x790]

  5. #5
    _Mike's Avatar Contributor
    Reputation
    310
    Join Date
    Apr 2008
    Posts
    531
    Thanks G/R
    0/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Or do it the "proper" way and define the descriptors as structures that inherit from each other instead of using enums or #defines.

  6. #6
    Envoke's Avatar Contributor
    Reputation
    105
    Join Date
    Jan 2009
    Posts
    201
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by romb0t View Post
    So from the dump thread for 4.3.4_15595 ([WoW][4.3.4.15595] Info Dump Thread) (but did not change from previous 4.x) for BaseObject , the latest property is at 0x1c meaning that the first Unit specific property is at 0x20 and the last Unit specific property is at 0x20+0x224 meaning the first Player specific property is at 0x248. For the XP property, it should be 0x248+0x790.

    So if CurrentObject represents a player object, you will access to XP by doing:
    [[CurrentObject + 0xc]+0x248+0x790]
    Set that in my code and displayed the value correctly! I still don't really understand where you are getting these values in the 4.3.4 dump link you sent... Just as example I see where PLAYER_XP is defined as
    Code:
    PLAYER_XP                                 = UNIT_END + 0x01E2
    but in the code you sent the values are only "0x248+0x790". Thank you a lot of the response!

  7. #7
    romb0t's Avatar Member
    Reputation
    79
    Join Date
    Dec 2011
    Posts
    212
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Yes because in the dump the descriptor should be multiplied by 4...

    So with: PLAYER_XP = UNIT_END + 0x1E4, and UNIT_END = OBJECT_END + 0x8A and OBJECT_END = 0x8, you obtain: (0x8+0x8A)*4 + 0x1E4*4=0x248+0x790.

  8. #8
    Envoke's Avatar Contributor
    Reputation
    105
    Join Date
    Jan 2009
    Posts
    201
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by romb0t View Post
    Yes because in the dump the descriptor should be multiplied by 4...

    So with: PLAYER_XP = UNIT_END + 0x1E4, and UNIT_END = OBJECT_END + 0x8A and OBJECT_END = 0x8, you obtain: (0x8+0x8A)*4 + 0x1E4*4=0x248+0x790.
    Oh okay! I understand it now thanks! I will give you +rep

    Just to extend my code and practice I wanted to create code that lists all the players around me. Getting all the information is pretty easy, but I am having trouble finding out how to get the name? I can get my name fine with..

    Code:
                    buffer = new byte[60];
                    ReadProcessMemory(WoWHandle, ((uint)MAIN_BASE + (uint)WOW401.PLAYER_NAME), buffer, buffer.Length, out o);
                    string PlayerName = System.Text.Encoding.ASCII.GetString(buffer);
    Code:
    internal enum Globals : uint
    {
        PlayerName = 0x9BE820,
    but how would I go about getting the other players name? I did not see any values in the in the ePlayerFields or eUnitFields for this. Thanks again for the help!
    Last edited by Envoke; 05-17-2012 at 03:36 PM.

  9. #9
    lanman92's Avatar Active Member
    Reputation
    50
    Join Date
    Mar 2007
    Posts
    1,033
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Use search. There's lots of posts about finding names of players and NPCs. It's not as simple as reading descriptors, though. Best method is to use the VMT of the object.

  10. #10
    romb0t's Avatar Member
    Reputation
    79
    Join Date
    Dec 2011
    Posts
    212
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    True, it is much more complicated for OOP application as you have to search in the name cache...

    So try to look for "name cache" and you should find a lots of interesting postings.

  11. #11
    Envoke's Avatar Contributor
    Reputation
    105
    Join Date
    Jan 2009
    Posts
    201
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ok I will look up reading from player cache. With your guys help I was able to make a semi-bot lol. I have 2 accounts that are linked by reffer a friend, so x3 xp, but my friend doesnt play very much so the bot I made is for that character, I just keep two wows open and it heals, fights, and follows lol while I play on my main.

Similar Threads

  1. Question about character value
    By finnabuytoons in forum World of Warcraft General
    Replies: 3
    Last Post: 12-22-2016, 03:52 AM
  2. Question About Account Value
    By Imthaendgame in forum World of Warcraft General
    Replies: 6
    Last Post: 09-05-2016, 03:01 AM
  3. Question about obtaining cpu register information.
    By lweid in forum WoW Memory Editing
    Replies: 2
    Last Post: 04-03-2011, 04:55 PM
  4. Quick question about switiching from private servers to retail
    By steveor in forum World of Warcraft Emulator Servers
    Replies: 4
    Last Post: 03-15-2008, 09:37 PM
All times are GMT -5. The time now is 11:58 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