Some pointer help for PWI

03/29/2013 20:01 abdct#1
EDIT:: my bad new here posted in wrong section.



Hi I wanted to try my hand at creating a few little tools for myself for pvp (for now it will output to console, but when i am done what it is going to do is hook d3d and output my hp, mana, opponents hp/mana and wither or not the opponent im pking can be stunned or immobilized (id have to check their buffs))

as of right now I have reversed most of the player structure that holds the health and defense along with other stuff but i am having troubles make it work as i want.

I am using dll injection for my tool and ive found the base address for my version of pwi and i know the offsets to find my data ex: 0x00BBC9CC->0x0A**CDC0+0x34->begining of data structure (can get to it in cheat engine no problem)

but in my code i cannot calculate the second pointer address so i can use that with my structure i made.

Code:
typedef struct
{
    BYTE Unknown01[0x468]; //Unknown stuff
    DWORD Id;
    DWORD Level;
    DWORD Cultivation;
    DWORD Current_HP;
    DWORD Current_MP;
    DWORD Exp;
    DWORD Spirit;
    DWORD Attribute_Points;
    DWORD Current_Chi;
    DWORD Attack_Level;
    DWORD Defence_Level;
    float Critical_Rate;
    float Rage_Damage;
    DWORD Stealth_Level;
    DWORD Stealth_Detection_Level;
    DWORD Slaying_Level;
    DWORD Warding_level;
    DWORD Vitality_Points;
    DWORD Magic_Points;
    DWORD Strength_Points;
    DWORD Dextarity_Points;
    DWORD Max_HP;
    DWORD Max_MP;
    DWORD HP_Regen;
    DWORD MP_Regen;
    float Walk_Speed;
    float Run_Speed;
    float Swim_Speed;
    float Fly_Speed;
    DWORD Accuracy;
    DWORD Min_Attack_Damage;
    DWORD Max_Attack_Damage;
    float Attack_Rate;
    float Range;
    DWORD Min_Metal_Damage;
    DWORD Max_Metal_Damage;
    DWORD Min_Wood_Damage;
    DWORD Max_Wood_Damage;
    DWORD Min_Water_Damage;
    DWORD Max_Water_Damage;
    DWORD Min_Fire_Damage;
    DWORD Max_Fire_Damage;
    DWORD Min_Earth_Damage;
    DWORD Max_Earth_Damage;
    DWORD Min_Magic_Damage;
    DWORD Max_Magic_Damage;
    DWORD Metal_Defence;
    DWORD Wood_Defence;
    DWORD Water_Defence;
    DWORD Fire_Defence;
    DWORD Earth_Defence;
    DWORD Physical_Defence;
    DWORD Evasion;
    DWORD Max_Chi;
    DWORD Coins;
    DWORD Max_Coins;
}PLAYER;

typedef struct
{
    BYTE Unknown[0x34];
    PLAYER *p_player;
}VARBASE;

DWORD WINAPI function()
{
    VARBASE *Stats = (VARBASE*)0x00BBC9CC;
    char lol[1000];

    sprintf(lol, "stats pointer: %p  |  player pointer: %p  |  player level: %ld", (void*)Stats, (void*)Stats->p_player, Stats->p_player->Level);
    SomeFunction(lol);

    return NULL;
}
hopefully it makes sense what I am trying to do. basically I would imagine that stats would point to what ever 0x00BBC9CC is pointing to then declaring a 0x34 byte array would set my address +34 and then declaring another pointer would point me to the beginning of my data structure where all my values would be aligned.

if anyone has a better/easier method for this let me know. :<

tl;dr found base addresss, need to get the pointer from base address+34 and use the address that points to for my structure.