Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Cs2 entity list changes

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Июл 2022
Сообщения
16
Реакции
0
C++:
Expand Collapse Copy
if (!client) return;

uintptr_t vmAddr = client + cs2_dumper::offsets::client_dll::dwViewMatrix;
if (!vmAddr) return;
float (*ViewMatrix)[4][4] = (float(*)[4][4])vmAddr;

uintptr_t localPawn = *(uintptr_t*)(client + cs2_dumper::offsets::client_dll::dwLocalPlayerPawn);
uintptr_t entityList = *(uintptr_t*)(client + cs2_dumper::offsets::client_dll::dwEntityList);
int localTeam = *(int*)(client + cs2_dumper::schemas::client_dll::C_BaseEntity::m_iTeamNum);

if (!localPawn || !entityList) return;

for (int i = 1; i < 64; i++) {
    uintptr_t list_entry = *(uintptr_t*)(entityList + (8 * (i >> 9) + 16));
    if (!list_entry) continue;

    uintptr_t controller_identity = list_entry + (112 * (i & 0x1FF));
    if (!controller_identity) continue;

    uintptr_t controller = *(uintptr_t*)(controller_identity);
    if (controller <= 0x1000) continue;

    uintptr_t namePtr = *(uintptr_t*)(controller + cs2_dumper::schemas::client_dll::CCSPlayerController::m_sSanitizedPlayerName);
    const char* playerName = (namePtr > 0x1000) ? (const char*)namePtr : "?";

    uint32_t pawnHandle = *(uint32_t*)(controller + cs2_dumper::schemas::client_dll::CCSPlayerController::m_hPlayerPawn);
    if (pawnHandle == 0xFFFFFFFF) continue;

    int pawnIndex = pawnHandle & 0x7FFF;
    uintptr_t p_chunk_ptr = *(uintptr_t*)(entityList + (8 * (pawnIndex >> 9) + 16));
    if (!p_chunk_ptr) continue;

    uintptr_t pawn_identity = p_chunk_ptr + (112 * (pawnIndex & 0x1FF));
    if (!pawn_identity) continue;

    uintptr_t current_pawn = *(uintptr_t*)(pawn_identity);
    if (current_pawn <= 0x1000 || current_pawn == localPawn) continue;

    int currentTeamNum = *(int*)(current_pawn + cs2_dumper::schemas::client_dll::C_BaseEntity::m_iTeamNum);
    if (!currentTeamNum) continue;

    if (currentTeamNum == localTeam) continue;

    int health = *(int*)(current_pawn + cs2_dumper::schemas::client_dll::C_BaseEntity::m_iHealth);
    if (health <= 0 || health > 100) continue;
вот если кому надо способ получения энтити после обновы
 
Возможно я чего-то не понимаю. Но зачем ты проверяешь и потом уже присваивашь controller. Не легче сначало присвоить и потом проверить? И судя по всему это интернал. Не думаю что использовать оффсеты в интернале хорошая идея, тем более при итерации по сущностям. Точно как это сделанно в кс2 не скажу, но например в гарисс моде есть CClientEntityList
 
Назад
Сверху Снизу