[HELP] Finding ZGetGameClient pointers

Joined
Jan 4, 2007
Messages
1,599
Reaction score
217
Code:
return *(DWORD*)(ZGetGameClient() + 0x1A4)
return *([i]type[/i]*)(ZGetGameClient() + [i]pointer[/i])
1A4 would be used to find the player's HighID.

How do I find ZGetGameClient / ZGAME pointers?

Also, what would be the pointer to find the player's UGradeID?
 
Last edited:
Code:
return *(DWORD*)(ZGetGameClient() + 0x1A4)
return *([i]type[/i]*)(ZGetGameClient() + [i]pointer[/i])
1A4 would be used to find the player's HighID.

How do I find ZGetGameClient / ZGAME pointers?

Also, what would be the pointer to find the player's UGradeID?

You have to reverse engineer them. Maybe you should look into mapping out the ZGameClient structure, but before you can do that you need to learn about reverse engineering and programming with pointers.
 
Last edited:
Upvote 0
ZApplication::GetGameClient() can be found with the signature

Code:
8B 00 8B 80 EC 02 00 00

ZGetGameClient() is just a jmp to this static member

ZApplication::GetGame() can similarly be found with the signature

Code:
8B 00 8B 80 F0 02 00 00

ZGetGame() is also a jmp to this

those signatures will work as long as the ZApplication struct doesn't change (it hasn't since JGunz, so that seems pretty unlikely)

i lol'd @ phail's post before the edit

edit: UGradeID can be found in ZMyInfo, but you don't get a handout on that one
 
Last edited:
Upvote 0
Code:
#define ZMYINFO_GETINSTANCE                        0x0044ECE0

bool CApplication::IsAdmin() const
{
    int nUGradeID = 0;
    DWORD_PTR pInstance = 0;

    __asm
    {
        mov eax, ZMYINFO_GETINSTANCE
        call eax
        mov pInstance, eax
    }

    if( !pInstance )
        return false;

    nUGradeID = *(DWORD*)( pInstance + 0x154 );

    return nUGradeID == 255;
}

Enjoy
 
Upvote 0
Code:
#define ZMYINFO_GETINSTANCE                        0x0044ECE0

bool CApplication::IsAdmin() const
{
    int nUGradeID = 0;
    DWORD_PTR pInstance = 0;

    __asm
    {
        mov eax, ZMYINFO_GETINSTANCE
        call eax
        mov pInstance, eax
    }

    if( !pInstance )
        return false;

    nUGradeID = *(DWORD*)( pInstance + 0x154 );

    return nUGradeID == 255;
}
Enjoy

Thanks a lot!

Original code I wrote:
Code:
int GetUGradeID()
{
    int UGradeID = 0;
    __asm
    {
        mov eax, dword ptr [ZMyInfo() + 0x154]
        call eax
        mov UGradeID, eax
    }

    return (int)UGradeID;
}

I had thought that it was called that way.
 
Last edited:
Upvote 0
Back