Вопрос External spectator list

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
15 Ноя 2024
Сообщения
3
Реакции
0
Я хочу сделать спектатор лист для моего чита на c++, но как мне это сделать? Я просто новичок и не до конца понимаю какие для этого брать оффсеты и как получить спектатор лист
 
spec list:
Expand Collapse Copy
void draw_spectators() {
    auto y = 0u;
    auto local_player = interfaces::game_entity_system->GetLocalPlayerController();
    for (auto i = 0; i < interfaces::game_entity_system->GetHighestEntityIndex(); i++) {
        auto entity = interfaces::game_entity_system->GetBaseEntity(i);
        if (!entity || !entity->IsBasePlayerController())
            continue;
 
        auto controller = (CCSPlayerController*)entity;
        auto pawn       = controller->m_hPawn().get<CBasePlayerPawn>();
        if (!pawn)
            continue;
 
        auto observer_service = pawn->m_pObserverServices();
        auto observer_target  = observer_service->m_hObserverTarget().get<CCSObserverPawn>();
        if (!observer_target)
            continue;
 
        auto target_controller = observer_target->m_hController().get<CCSPlayerController>();
        if (!target_controller)
            continue;
 
        if (config::visuals::spectators_local_only && target_controller != local_player)
            continue;
 
        auto str = std::format(
            "{} -> {} ({})",
            controller->m_sSanitizedPlayerName(),
            target_controller->m_sSanitizedPlayerName(),
            observer_service->m_iObserverMode() == 2 ? "first-person" : "third-person"
        );
 
        render::text(10, 320 + y, str, col_t(0, 0, 255, 255));
        y += render::get_text_size(str).y + 2;
    }
}




from
Пожалуйста, авторизуйтесь для просмотра ссылки.
noad
 
fix:
Expand Collapse Copy
if (MenuVars::Visuals::skeleton) {
    BodyPart bodyParts[13];
    bool allBonesValid = true;
    
    for (int i = 0; i < 13; i++) {
        int boneIndex = boneMapping[i];
        bodyParts[i].position = M::R<Vec3>(boneMatrix + boneIndex * 32);
        
        // Validate bone position is reasonable
        if (!bodyParts[i].position.x ||
            bodyParts[i].position.x < -50000 || bodyParts[i].position.x > 50000 ||
            bodyParts[i].position.y < -50000 || bodyParts[i].position.y > 50000 ||
            bodyParts[i].position.z < -50000 || bodyParts[i].position.z > 50000) {
            allBonesValid = false;
            break;
        }
        
        bodyParts[i].isValid = bodyParts[i].position.WorldToScreen(bodyParts[i].screenPos, viewMatrix);
    }
    
    // Only draw skeleton if all bones are valid
    if (allBonesValid) {
        // Your existing drawing code here...
    }
}
 
Код:
Expand Collapse Copy
 inline uintptr_t getAddressBase(uintptr_t entityList, uintptr_t playerPawn)
 {
     uintptr_t listEntrySecond;
     cs2.ReadMemory<uintptr_t>(entityList + 0x8 * ((playerPawn & 0x7FFF) >> 9) + 16, listEntrySecond);

     uintptr_t isPawn;
     cs2.ReadMemory<uintptr_t>(listEntrySecond + 120 * (playerPawn & 0x1FF), isPawn);

     return listEntrySecond == 0 ? 0 : isPawn;
 }

 inline void GetSpectatorList()
 {
     spectatorsz.clear();
     playerlist.clear();
     uintptr_t LocalPlayer = cs2.ReadMemory<uintptr_t>(gGame.GetClientDLLAddress()+ Offset.LocalPlayerController);
     uintptr_t localPlayerPawn = cs2.ReadMemory<uintptr_t>(LocalPlayer + Offset.PlayerController.m_hPawn);
     uintptr_t entityList = cs2.ReadMemory<uintptr_t>(gGame.GetClientDLLAddress() + Offset.EntityList);
     uintptr_t localPlayerPawn1 = cs2.ReadMemory<uintptr_t>(entityList + 0x10);
     uintptr_t CSlocalPlayerPawn = cs2.ReadMemory<uintptr_t>(localPlayerPawn1 + 120 * (localPlayerPawn & 0x1FF));
     int localTeam = cs2.ReadMemory<int>(LocalPlayer + Offset.Pawn.iTeamNum);

     for (int i = 1; i < 64; i++) {
         uintptr_t list_entry1 = cs2.ReadMemory<uintptr_t>(entityList + (8 * (i & 0x7FFF) >> 9) + 16);
         if (!list_entry1)
             continue;

         uintptr_t playerController = cs2.ReadMemory<uintptr_t>(list_entry1 + 120 * (i & 0x1FF));
         if (!playerController)
             continue;

         uint32_t spectatorPawn = cs2.ReadMemory<uint32_t>(playerController + Offset.PlayerController.m_hPawn);
         if (!spectatorPawn)
             continue;
      

         uintptr_t listEntrySecond = cs2.ReadMemory<uintptr_t>(entityList + 0x8 * ((spectatorPawn & 0x7FFF) >> 9) + 16);
         if (!listEntrySecond)
             continue;

         uintptr_t pawn = cs2.ReadMemory<uintptr_t>(listEntrySecond + 120 * (spectatorPawn & 0x1FF));
         if (!pawn)
             continue;
         listEntrySecond == 0 ? 0 : pawn;

         cs2.ReadMemory<int>(pawn + Offset.Pawn.iTeamNum, TeamID);

         int health = cs2.ReadMemory<int>(pawn + Offset.Pawn.CurrentHealth);

         uintptr_t observed = cs2.ReadMemory<uintptr_t>(pawn + Offset.PlayerController.m_pObserverServices);

         uint64_t observedTarget = cs2.ReadMemory<uintptr_t>(observed + Offset.PlayerController.m_hObserverTarget);

         auto listEntrySecond1 = cs2.ReadMemory<uintptr_t>(entityList + (0x8 * ((observedTarget & 0x7FFF) >> 9)) + 16);
         auto spectatorTarget = cs2.ReadMemory<uintptr_t>(listEntrySecond + 120 * (observedTarget & 0x1FF));
         const size_t length = 128;
         char buffer[length] = { 0 };

         cs2.ReadMemory(playerController + Offset.Entity.iszPlayerName, buffer, sizeof(buffer));
         std::string PlayerNamer(buffer);
        

         GetPlayerList(PlayerNamer);
         if (observed) {
             if (spectatorTarget == CSlocalPlayerPawn) {

                 spectatorsz.insert(PlayerNamer);

             }
         }
        
        
     }
     SpecList::SpectatorWindowList();
 }
 
красавы, один дал сурс из интернала где юзаются интерфейсы, другой дал вообще сурс скелетонов, ток 3 понял как все делать
 
красавы, один дал сурс из интернала где юзаются интерфейсы, другой дал вообще сурс скелетонов, ток 3 понял как все делать
в чем проблема это переделать под экстернал? все оффсеты есть в дампере, смысл понятен :DDDDDD
 
Назад
Сверху Снизу