Skip to content
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
Collapse

Plutonium

  1. Home
  2. BO2 Modding Releases & Resources
  3. BO2 External Zombie ESP (ADDRESSES & OFFSETS)/Tutorial

BO2 External Zombie ESP (ADDRESSES & OFFSETS)/Tutorial

Scheduled Pinned Locked Moved BO2 Modding Releases & Resources
1 Posts 1 Posters 81 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • anindietripundefined Offline
    anindietripundefined Offline
    anindietrip
    wrote last edited by
    #1

    So I made an external zombie esp and got the offsets for a few things

    \\---------------------------------------------------------------------------\
                                          Message to the mods
                          Please do not ban me this is highly detectable 
                                I am 90% sure you already detect it
    \\---------------------------------------------------------------------------\
    

    These are all based on "plutonium-bootstrapper-win32.exe"

    Zombie Entity List - "plutonium-bootstrapper-win32.exe"+0x1F30470

    How to read zombie entity list:
    the first zombie is from reading the pointer at the zombie entity list address
    then for each zombie after that they are located at increments of 0x8C
    I recommend at least reading up to 256 entities minimum this you can do smaller but i like to be safe

    uint32_t entity;
    ReadProcessMemory(pHandle, (LPCVOID)(moduleBase + elistaddress + (0x8C * i)), &entity, sizeof(entity), nullptr);
    if (entity == NULL)
         continue;
    

    Zombie Offsets:
    health -> 0x1A8
    Position -> 0x134 (a vector3) increments of 4 bytes for each position it will return (x,z,y)

    struct zombie_pos
    {
    	float x, y, z;
    };
    
    zombie_pos pos;
    ReadProcessMemory(pHandle, (LPCVOID)(entity + 0x134), &pos, sizeof(zombie_pos), nullptr);
    

    When reading entities you will get a lot of junk out of it that will still render so reading this offset and checking its value helps

    sorting offset (idk what to call this) -> 0x228

    check if this offset of the zombie is equal to 9999 or 666
    its worked well enough for me every once in a while a zombie doesnt get drawn and i assume its do to this I havent figured it out
    (I do not know if panzers are in this or not have not tested)

    Player View Matrix - 0x0103AD40
    Reading the view matrix and doing w2s

    to read our view matrix we want to make a struct of 16 different floats

    struct viewMatrix {
    	float m1, m2, m3, m4;
    	float m5, m6, m7, m8;
    	float m9, m10, m11, m12;
    	float m13, m14, m15, m16;
    };
    

    Then we should read the proccess memory from our viewmatrix address

    viewMatrix vm;
    ReadProcessMemory(pHandle, (LPCVOID)vmaddress, &vm, sizeof(viewMatrix), nullptr);
    

    then we will need this function in order to convert our zombie's 3d position to a 2d screen position

    vec2 worldToScreen(viewMatrix m, float x, float y, float z, int w, int h) {
    	float clip_x = x * m.m1 + y * m.m2 + z * m.m3 + m.m4;
    	float clip_y = x * m.m5 + y * m.m6 + z * m.m7 + m.m8;
    	float clip_w = x * m.m13 + y * m.m14 + z * m.m15 + m.m16;
    
    	if (clip_w < 0.01) {
    		vec2 offscreenVec = { -99,-99 };
    		return offscreenVec;
    	}
    
    	float ndc_x = clip_x / clip_w;
    	float ndc_y = clip_y / clip_w;
    
    	vec2 screenPos = { (ndc_x + 1.0) * 0.5 * w,(1.0 - ndc_y) * 0.5 * h };
    	return screenPos;
    }
    

    Using the W2S Function

    vec2 res = worldToScreen(vm, pos.x, pos.y, pos.z, 1920, 1080);
    
    if (res.x == -99.f && res.y == -99.f)
    	continue;
    

    Player Address - "plutonium-bootstrapper-win32.exe"+0x8A4EEC

    Reading Your Player Data

    start by reading the pointer at player address

    uintptr_t player;
    ReadProcessMemory(pHandle, (LPCVOID)(moduleBase + 0x8A4EEC), &player, sizeof(player), nullptr);
    

    then to get the position of our player we read the same way we did our zombie position but starting at 0x18

    zombie_pos player_pos;
    ReadProcessMemory(pHandle, (LPCVOID)(player + 0x18), &player_pos, sizeof(zombie_pos), nullptr);
    

    Tada you have everything you need to make an esp for zombies.
    Go have fun at make sure you either play in lan mode or just solo play (solo play online still has anti cheat enabled so be wary of that)

    1 Reply Last reply
    0
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Donate