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

Гайд CS2 Thirdperson — Логика CameraState и оффсеты

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
703
Реакции
21
Наткнулся на интересный вариант реализации третьего лица (Thirdperson) в CS2 через хук. Автор называет код «костыльным» и в итоге перекатился на OverrideView, но для тех, кто копает внутренности движка и ищет альтернативные способы манипуляции камерой, этот фрагмент может быть полезен — как минимум из-за структуры оффсетов.

Суть метода заключается в перехвате функции и прямой записи в структуру CameraState.

Что по техничке:
  1. Базовый расчет CameraState:
    Код:
    Expand Collapse Copy
    2344LL * (int)a2 + a1 + 552
  2. Оффсеты внутри стейта:
    • + 0x1 — Boolean (состояние активации)
    • + 0x2 — Boolean (флаг интерполяции/активности)
    • + 0x8 — Float (Pitch / EyeAngles.x)
    • + 0xC — Float (Yaw / EyeAngles.y)
    • + 0x10 — Float (Дистанция камеры)

Код:
Expand Collapse Copy
__int64 __fastcall hooks::hkThirdperson(__int64 a1, unsigned int a2) {
    __int64 Result = oThirdperson(a1, a2);
    auto local = static_cast<C_CSPlayerPawn*>(sdk::GetLocalPlayer());

    if (!local || !local->IsAlive())
        return Result;

    __int64 CameraState = 2344LL * (int)a2 + a1 + 552;

    if (globals::thirdperson) {
        Vec3 EyeAngles = local->GetEyeAngles();
        *reinterpret_cast<bool*>(CameraState + 0x1) = true;
        *reinterpret_cast<bool*>(CameraState + 0x2) = true;
        *reinterpret_cast<float*>(CameraState + 0x8) = EyeAngles.x;
        *reinterpret_cast<float*>(CameraState + 0xC) = EyeAngles.y;
        *reinterpret_cast<float*>(CameraState + 0x10) = static_cast<float>(globals::thirdperson_dist);
    }
    else {
        *reinterpret_cast<bool*>(CameraState + 0x1) = false;
        *reinterpret_cast<bool*>(CameraState + 0x2) = false;
    }
    return Result;
}

Нюансы:
В Source 2 работа с камерой через хуки часто конфликтует с расчетом ViewMatrix или интерполяцией в OverrideView. Если у вас камера дергается или не хочет менять зум, лучше делайте через client.dll и стандартный SDK-шный метод переопределения вьюхи. Тем не менее, математика адресов здесь верная и может пригодиться при реверсе актуальных билдов.

Интересно, кто-нибудь пробовал фиксить коллизии при таком подходе или все сидят на стандартном OverrideView?
 
ты ебу дал? где ты в моём сообщении увидел хоть капельку агрессии или ненависти к тебе?
1779585790524.png
 
Назад
Сверху Снизу