Help Help with SAMP Player Pools.

slep2.0

Member
Joined
Jun 15, 2025
Messages
7
Reaction score
0
Hey, I'm trying to create an int function that will return a ped from a player ID supplied.
I do have the struct of the pool, however I don't have the memory address, or the knowledge to how to get it. I did try to go to this offset the user Parazitas sent in one of the threads.

samp.dll + 0x26EA0C + 0x3DE + 0x4
However when I tried to access it in ghidra, or in x32dbg I was met with an empty result, it might be because of my inexprience but i don't know really.
If you can help me with building the function from scratch, thank you.
Here are my resources: (taken from s0beit)
struct SampPlayerPool // This is taken from s0beit.
{
//uint32_t ulMaxPlayerID;
int iLocalPlayerScore;
uint16_t sLocalPlayerID;
void* pVTBL_txtHandler;
std::string strLocalPlayerName;
int iLocalPlayerPing;
struct stLocalPlayer* pLocalPlayer;
int iIsListed[SAMP_MAX_PLAYERS];
BOOL bSavedCheckCollision[SAMP_MAX_PLAYERS];
struct stRemotePlayer* pRemotePlayer[SAMP_MAX_PLAYERS];
int largestID;
};

SampPlayerPool* g_Players = nullptr;
I'm guessing to myself we would need to iterate over the pool samp fills with, access the sLocalPlayerId and check with the input that was given.
 

Parazitas

God
Staff member
Joined
Jan 2, 2017
Messages
3,344
Solutions
7
Reaction score
952
Location
Lithuania
BTW, I am using DK22Pac plugin-sdk, so I have access to gta's san andreas player ped, pools, and other stuff.
gta is not same as samp..
Actor handle by id:

More stuff
 

slep2.0

Member
Joined
Jun 15, 2025
Messages
7
Reaction score
0
You are able to manipulate gta's memory that samp uses, like your own ped, vehicles, i'm guessing it will just send an RPC to the server
Thank you very much though, please keep this thread open as I might have more questions :D
 

slep2.0

Member
Joined
Jun 15, 2025
Messages
7
Reaction score
0
Hey, Parazitas, I've pretty sure i've done this wrong, can you tell?

CPlayerPed getSampPedFromId(short id) { if (!sampBase) { return; } // Using UINT32_T means we read 4 bytes, as thats a 32bit app max size per register. uintptr_t addr1 = sampBase + static_cast<uintptr_t>(0x21A0F8); // SAMP_INFO_OFFSET uint32_t val1 = *reinterpret_cast<uint32_t*>(addr1); uintptr_t addr2 = val1 + static_cast<uintptr_t>(0x3CD); // SAMP_pPOOLS_OFFSET uint32_t val2 = *reinterpret_cast<uint32_t*>(addr2); uintptr_t addr3 = val2 + static_cast<uintptr_t>(0x18); // SAMP_PPOOL_PLAYER_OFFSET uint32_t val3 = *reinterpret_cast<uint32_t*>(addr3); id *= 0x4; // PLAYER_ID times 4 id += 0x2E; // SAMP_REMOTEPLAYER_OFFSET val3 += id; uint32_t val4 = *reinterpret_cast<uint32_t*>(val3); if (val4 > 0) { val4 += 0x44; // SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET uint32_t val5 = *reinterpret_cast<uint32_t*>(val4); if (val5 > 0) { return *reinterpret_cast<CPlayerPed*>(val5); } else { return; } } else { return; } }
 

Parazitas

God
Staff member
Joined
Jan 2, 2017
Messages
3,344
Solutions
7
Reaction score
952
Location
Lithuania
Why did you skipped 2 steps and went stright to handle offset? :D

Finish code yourself...
C++:
CPlayerPed getSampPedFromId(short ID) {
    if (!sampBase) {
        return;
    }
    // Using UINT32_T means we read 4 bytes, as thats a 32bit app max size per register.
    uintptr_t SAMP_INFO_POINTER_OFFSET = sampBase + static_cast<uintptr_t>(0x21A0F8); // SAMP_INFO_OFFSET
    
    uint32_t SAMP_INFO_POINTER = *reinterpret_cast<uint32_t*>(SAMP_INFO_POINTER_OFFSET);
    
    uintptr_t SAMP_POOLS_POINTER_OFFSET = SAMP_INFO_POINTER + static_cast<uintptr_t>(0x3CD); // SAMP_POOLS_OFFSET
    
    uint32_t SAMP_POOLS_POINTER = *reinterpret_cast<uint32_t*>(SAMP_POOLS_POINTER_OFFSET);
    
    uintptr_t SAMP_PPOOL_PLAYER_POINTER_OFFSET = SAMP_POOLS_POINTER + static_cast<uintptr_t>(0x18); // SAMP_PPOOL_PLAYER_OFFSET
    
    uint32_t SAMP_PPOOL_PLAYER_POINTER = *reinterpret_cast<uint32_t*>(SAMP_PPOOL_PLAYER_POINTER_OFFSET);
    
    ID *= 0x4; // PLAYER_ID times 4
    ID += 0x2E; // SAMP_REMOTEPLAYER_OFFSET

    SAMP_PPOOL_PLAYER_POINTER += ID;
    uint32_t SAMP_REMOTEPLAYER = *reinterpret_cast<uint32_t*>(SAMP_PPOOL_PLAYER_POINTER);

    if (SAMP_REMOTEPLAYER > 0) {
        SAMP_REMOTEPLAYER += 0x0; // SAMP_REMOTEPLAYERDATA_OFFSET 
        uint32_t SAMP_REMOTEPLAYERDATA_OFFSET = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYER);
        
        if (SAMP_REMOTEPLAYERDATA_OFFSET > 0) {
            SAMP_REMOTEPLAYERDATA_OFFSET += 0x0; // SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET 
        uint32_t SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYERDATA_OFFSET);
        
        if (SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET > 0) {
            SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET += 0x44; // SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET 
        uint32_t SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET  = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET);
            return *reinterpret_cast<CPlayerPed*>(SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET );
            // etc... many false returns...
 

slep2.0

Member
Joined
Jun 15, 2025
Messages
7
Reaction score
0
C++:
CPlayerPed* getSampPedFromId(short ID) {
    if (!sampBase) {
        Error("No samp base.");
        return reinterpret_cast<CPlayerPed*>(-1);
    }
    // Using UINT32_T means we read 4 bytes, as thats a 32bit app max size per register.
    uintptr_t SAMP_INFO_POINTER_OFFSET = sampBase + static_cast<uintptr_t>(0x21A0F8); // SAMP_INFO_OFFSET

    uint32_t SAMP_INFO_POINTER = *reinterpret_cast<uint32_t*>(SAMP_INFO_POINTER_OFFSET);

    uintptr_t SAMP_POOLS_POINTER_OFFSET = SAMP_INFO_POINTER + static_cast<uintptr_t>(0x3CD); // SAMP_POOLS_OFFSET

    uint32_t SAMP_POOLS_POINTER = *reinterpret_cast<uint32_t*>(SAMP_POOLS_POINTER_OFFSET);

    uintptr_t SAMP_PPOOL_PLAYER_POINTER_OFFSET = SAMP_POOLS_POINTER + static_cast<uintptr_t>(0x18); // SAMP_PPOOL_PLAYER_OFFSET

    uint32_t SAMP_PPOOL_PLAYER_POINTER = *reinterpret_cast<uint32_t*>(SAMP_PPOOL_PLAYER_POINTER_OFFSET);

    ID *= 0x4; // PLAYER_ID times 4
    ID += 0x2E; // SAMP_REMOTEPLAYER_OFFSET

    SAMP_PPOOL_PLAYER_POINTER += ID;
    uint32_t SAMP_REMOTEPLAYER = *reinterpret_cast<uint32_t*>(SAMP_PPOOL_PLAYER_POINTER);

    if (SAMP_REMOTEPLAYER > 0) {
        SAMP_REMOTEPLAYER += 0x0; // SAMP_REMOTEPLAYERDATA_OFFSET
        uint32_t SAMP_REMOTEPLAYERDATA_OFFSET = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYER);

        if (SAMP_REMOTEPLAYERDATA_OFFSET > 0) {
            SAMP_REMOTEPLAYERDATA_OFFSET += 0x0; // SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET
            uint32_t SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYERDATA_OFFSET);

            if (SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET > 0) {
                SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET += 0x44; // SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET
                uint32_t SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET = *reinterpret_cast<uint32_t*>(SAMP_REMOTEPLAYERDATA_ACTOR_OFFSET);
                char buf[256];
                sprintf(buf, "Before reinterpret_cast: 0x%08X", SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET);
                Error(buf);
                return reinterpret_cast<CPlayerPed*>(SAMP_REMOTEPLAYERDATA_HANDLE_OFFSET);
            }
            return reinterpret_cast<CPlayerPed*>(-1);
        }
        return reinterpret_cast<CPlayerPed*>(-1);
    }
    return reinterpret_cast<CPlayerPed*>(-1);
}
This code just returns the adderess 0x00000101 each time, even before interpreting the cast. Yes this is done in SAMP R1. Help :D
 

Hidend

Expert
Joined
Mar 4, 2013
Messages
669
Reaction score
52
C++:
void* SAMPGetActorHandleByID(int playerID, void* samp_base) {
    if (!samp_base) return nullptr;

    int version = get_samp_version_id(samp_base);
    if (version < 0) return nullptr;

    DWORD samp_info_offset = 0;
    DWORD ppool_offset = 0;
    DWORD player_pool_offset = 0;
    DWORD max_player_id_offset = 0;
    DWORD remoteplayer_offset = 0;
    DWORD remoteplayerdata_offset = 0;
    DWORD actor_offset = 0;
    DWORD gta_entity_offset = 0x40; // always 0x40 yeppp

    switch (version) {
    case 0: // R1 tested
        samp_info_offset = 0x21A0F8;
        ppool_offset = 0x3CD;
        player_pool_offset = 0x18;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 1: // R2 tested
        samp_info_offset = 0x21A100;
        ppool_offset = 0x3C5;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x22;
        remoteplayer_offset = 0x26;
        remoteplayerdata_offset = 0xC;
        actor_offset = 0x1C;
        break;
    case 2: // R3 tested
        samp_info_offset = 0x26E8DC;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x4;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 3: // R4-1 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 4: // R4 - v2 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 5: // R5 tested
        samp_info_offset = 0x26EB94;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    default:
        return nullptr;
    }

    DWORD samp_info = *(DWORD*)((char*)samp_base + samp_info_offset);
    if (!samp_info) return nullptr;

    DWORD samp_pools = *(DWORD*)((char*)samp_info + ppool_offset);
    if (!samp_pools) return nullptr;

    DWORD player_pool = *(DWORD*)((char*)samp_pools + player_pool_offset);
    if (!player_pool) return nullptr;

    DWORD max_player_id = *(DWORD*)((char*)player_pool + max_player_id_offset);
    if (playerID < 0 || playerID > max_player_id) return nullptr;

    DWORD remote_player_ptr_addr = player_pool + remoteplayer_offset + (playerID * 4);

    DWORD remote_player = *(DWORD*)remote_player_ptr_addr;
    if (!remote_player) return nullptr;

    DWORD player_data = *(DWORD*)(remote_player + remoteplayerdata_offset);
    if (!player_data) return nullptr;

    DWORD samp_actor = *(DWORD*)(player_data + actor_offset);
    if (!samp_actor) return nullptr;

    DWORD gta_entity = *(DWORD*)(samp_actor + gta_entity_offset);

    return (void*)gta_entity;
}
 

SobFoX

Expert
Joined
Jul 14, 2015
Messages
1,493
Solutions
5
Reaction score
926
Location
Israel
C++:
void* SAMPGetActorHandleByID(int playerID, void* samp_base) {
    if (!samp_base) return nullptr;

    int version = get_samp_version_id(samp_base);
    if (version < 0) return nullptr;

    DWORD samp_info_offset = 0;
    DWORD ppool_offset = 0;
    DWORD player_pool_offset = 0;
    DWORD max_player_id_offset = 0;
    DWORD remoteplayer_offset = 0;
    DWORD remoteplayerdata_offset = 0;
    DWORD actor_offset = 0;
    DWORD gta_entity_offset = 0x40; // always 0x40 yeppp

    switch (version) {
    case 0: // R1 tested
        samp_info_offset = 0x21A0F8;
        ppool_offset = 0x3CD;
        player_pool_offset = 0x18;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 1: // R2 tested
        samp_info_offset = 0x21A100;
        ppool_offset = 0x3C5;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x22;
        remoteplayer_offset = 0x26;
        remoteplayerdata_offset = 0xC;
        actor_offset = 0x1C;
        break;
    case 2: // R3 tested
        samp_info_offset = 0x26E8DC;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x4;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 3: // R4-1 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 4: // R4 - v2 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 5: // R5 tested
        samp_info_offset = 0x26EB94;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    default:
        return nullptr;
    }

    DWORD samp_info = *(DWORD*)((char*)samp_base + samp_info_offset);
    if (!samp_info) return nullptr;

    DWORD samp_pools = *(DWORD*)((char*)samp_info + ppool_offset);
    if (!samp_pools) return nullptr;

    DWORD player_pool = *(DWORD*)((char*)samp_pools + player_pool_offset);
    if (!player_pool) return nullptr;

    DWORD max_player_id = *(DWORD*)((char*)player_pool + max_player_id_offset);
    if (playerID < 0 || playerID > max_player_id) return nullptr;

    DWORD remote_player_ptr_addr = player_pool + remoteplayer_offset + (playerID * 4);

    DWORD remote_player = *(DWORD*)remote_player_ptr_addr;
    if (!remote_player) return nullptr;

    DWORD player_data = *(DWORD*)(remote_player + remoteplayerdata_offset);
    if (!player_data) return nullptr;

    DWORD samp_actor = *(DWORD*)(player_data + actor_offset);
    if (!samp_actor) return nullptr;

    DWORD gta_entity = *(DWORD*)(samp_actor + gta_entity_offset);

    return (void*)gta_entity;
}
It's written so beautifully that it should be printed on the wall. :sneaky:
 

Expl01T3R

Active member
Joined
Nov 20, 2022
Messages
143
Reaction score
24
Location
Czech Republic
C++:
void* SAMPGetActorHandleByID(int playerID, void* samp_base) {
    if (!samp_base) return nullptr;

    int version = get_samp_version_id(samp_base);
    if (version < 0) return nullptr;

    DWORD samp_info_offset = 0;
    DWORD ppool_offset = 0;
    DWORD player_pool_offset = 0;
    DWORD max_player_id_offset = 0;
    DWORD remoteplayer_offset = 0;
    DWORD remoteplayerdata_offset = 0;
    DWORD actor_offset = 0;
    DWORD gta_entity_offset = 0x40; // always 0x40 yeppp

    switch (version) {
    case 0: // R1 tested
        samp_info_offset = 0x21A0F8;
        ppool_offset = 0x3CD;
        player_pool_offset = 0x18;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 1: // R2 tested
        samp_info_offset = 0x21A100;
        ppool_offset = 0x3C5;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x22;
        remoteplayer_offset = 0x26;
        remoteplayerdata_offset = 0xC;
        actor_offset = 0x1C;
        break;
    case 2: // R3 tested
        samp_info_offset = 0x26E8DC;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x4;
        remoteplayerdata_offset = 0x0;
        actor_offset = 0x0;
        break;
    case 3: // R4-1 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x8;
        max_player_id_offset = 0x0;
        remoteplayer_offset = 0x2E;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 4: // R4 - v2 tested
        samp_info_offset = 0x26EA0C;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    case 5: // R5 tested
        samp_info_offset = 0x26EB94;
        ppool_offset = 0x3DE;
        player_pool_offset = 0x4;
        max_player_id_offset = 0x2F3A;
        remoteplayer_offset = 0x1F8A;
        remoteplayerdata_offset = 0x10;
        actor_offset = 0x1DD;
        break;
    default:
        return nullptr;
    }

    DWORD samp_info = *(DWORD*)((char*)samp_base + samp_info_offset);
    if (!samp_info) return nullptr;

    DWORD samp_pools = *(DWORD*)((char*)samp_info + ppool_offset);
    if (!samp_pools) return nullptr;

    DWORD player_pool = *(DWORD*)((char*)samp_pools + player_pool_offset);
    if (!player_pool) return nullptr;

    DWORD max_player_id = *(DWORD*)((char*)player_pool + max_player_id_offset);
    if (playerID < 0 || playerID > max_player_id) return nullptr;

    DWORD remote_player_ptr_addr = player_pool + remoteplayer_offset + (playerID * 4);

    DWORD remote_player = *(DWORD*)remote_player_ptr_addr;
    if (!remote_player) return nullptr;

    DWORD player_data = *(DWORD*)(remote_player + remoteplayerdata_offset);
    if (!player_data) return nullptr;

    DWORD samp_actor = *(DWORD*)(player_data + actor_offset);
    if (!samp_actor) return nullptr;

    DWORD gta_entity = *(DWORD*)(samp_actor + gta_entity_offset);

    return (void*)gta_entity;
}
nice but i would do atleast 2 or more improves on this code to make it more clean, but nice code anyways. Also i guess this guy would need also src of method get_samp_version_id, but maybe its part of the plugin sdk, not sure.
 

SobFoX

Expert
Joined
Jul 14, 2015
Messages
1,493
Solutions
5
Reaction score
926
Location
Israel
o_Onice but i would do atleast 2 or more improves on this code to make it more clean, but nice code anyways. Also i guess this guy would need also src of method get_samp_version_id, but maybe its part of the plugin sdk, not sure.
Too clean code is disgusting

Real quality code: void nigga1()
int suck_niggers = 3;

🧐
 

slep2.0

Member
Joined
Jun 15, 2025
Messages
7
Reaction score
0
Your code works fantasticly, but how do I then access the ped, bcz it seems the struct on the native GTA doesnt with work SAMP.
Is there a CPed struct for a samp ped?


C++:
                void* pedAddr = SampPedHook::getSampPedById(1);
                char buf[256];
                sprintf(buf, "His Addr: %p", pedAddr);
                Error(buf);
                CPed* ped = reinterpret_cast<CPed*>(pedAddr);
Also tell me please if my comments are correct, that's all I could deduce from your offsets names and sm general knowledge ig.


C++:
    // The reason for char* casting is that we want to do pointer artihmetic on the offsets on the exact offset, and not to int* or stay with uintptr_t.
    DWORD samp_info = *(DWORD*)((char*)sampBase + samp_info_offset); // First offset - SAMP Info, where all of the basic fields of the struct reside, including pools.
    if (!samp_info) {
        return nullptr;
    }
    DWORD samp_pools = *(DWORD*)((char*)samp_info + ppool_offset); // Navigating to the samp pools struct.
    if (!samp_pools) {
        return nullptr;
    }
    DWORD player_pool = *(DWORD*)((char*)samp_pools + player_pool_offset); // From the list of pools such as vehicles, pickups, we will go into the player pool.
    if (!player_pool) {
        return nullptr;
    }
    DWORD max_player_id = *(DWORD*)((char*)player_pool + max_player_id_offset); // Measure the MAXIMUM player ID on the current server right now.
    if (playerID < 0 || playerID > max_player_id) {
        return nullptr;
    }
    DWORD remote_player_ptr_addr = player_pool + remoteplayer_offset + (playerID * 4); // The reason we are doing this is we are now adding the remoteplayer offset with our player pool with our remotePlayer pool offset, then adding playerID times 4 because each player takes 4 bytes on the struct, so we move each 4 by multiplying.

    DWORD remote_player = *(DWORD*)remote_player_ptr_addr; // Dereference the pointer address to the actual one.
    if (!remote_player) {
        return nullptr;
    }
    DWORD player_data = *(DWORD*)(remote_player + remoteplayerdata_offset); // Go to our player data struct.
    if (!player_data) {
        return nullptr;
    }
    DWORD samp_actor = *(DWORD*)(player_data + actor_offset); // Go to our samp actor struct.
    if (!samp_actor) {
        return nullptr;
    }
    DWORD gta_entity = *(DWORD*)(samp_actor + gta_entity_offset);

Thanks :)
 
Top