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

Вопрос Не работает функция 3 лицо и skybox помощь

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
27 Окт 2024
Сообщения
43
Реакции
1
всем добрый день
задался таким вопрос как правильно оформить функцию 3 лицо и зафиксить skybox aka (skychanger) с помощью оффсетов не могу никак найти нужный оффсет прошу помочь с данной проблемой потому что ломаю голову с моим другом 3 дня и не что не помогает
буду благодарен за данную помощь
 
всем добрый день
задался таким вопрос как правильно оформить функцию 3 лицо и зафиксить skybox aka (skychanger) с помощью оффсетов не могу никак найти нужный оффсет прошу помочь с данной проблемой потому что ломаю голову с моим другом 3 дня и не что не помогает
буду благодарен за данную помощь
скинь что нужно
 
всем добрый день
задался таким вопрос как правильно оформить функцию 3 лицо и зафиксить skybox aka (skychanger) с помощью оффсетов не могу никак найти нужный оффсет прошу помочь с данной проблемой потому что ломаю голову с моим другом 3 дня и не что не помогает
буду благодарен за данную помощь
привет! если тебе нужно реализовать 3 лицо internal методом, тебе нужен хук override view. вот реализация -

("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 48 8B FA E8")

рабочий пример реализации:
Expand Collapse Copy
    if (C_GET(bool, Vars.bThirdpersonAnimate))
    {
        float dt = ImGui::GetIO().DeltaTime;
        float speed = 8.0f;
        s_currentDistance += (targetDistance - s_currentDistance) * std::min(dt * speed, 1.0f);
    }
    else
    {
        s_currentDistance = targetDistance;
    }

    bool bInThirdperson = s_currentDistance > 1.0f;

    if (bInThirdperson)
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        auto pNativeDist = reinterpret_cast<float*>(pInput + 0x254);
        *pNativeFlag = 1;
        *pNativeDist = s_currentDistance;

        pSetup->nSomeFlags |= 1;

        uintptr_t pGameSceneNode = *reinterpret_cast<uintptr_t*>(pPawn + 0x338);
        if (pGameSceneNode)
        {
            Vector_t origin = *reinterpret_cast<Vector_t*>(pGameSceneNode + 0xD0);
            Vector_t viewOffset = *reinterpret_cast<Vector_t*>(pPawn + 0xD58);
            Vector_t eye_pos = origin + viewOffset;

            auto Deg2Rad = [](float d) { return d * (3.141592654f / 180.f); };
            float sy = std::sin(Deg2Rad(pSetup->angView.y)), cy = std::cos(Deg2Rad(pSetup->angView.y));
            float sp = std::sin(Deg2Rad(pSetup->angView.x)), cp = std::cos(Deg2Rad(pSetup->angView.x));
            Vector_t forward = { cp * cy, cp * sy, -sp };

            pSetup->vecOrigin = eye_pos - (forward * s_currentDistance);
        }
    }
    else
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        *pNativeFlag = 0;
    }
 
привет! если тебе нужно реализовать 3 лицо internal методом, тебе нужен хук override view. вот реализация -

("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 48 8B FA E8")

рабочий пример реализации:
Expand Collapse Copy
    if (C_GET(bool, Vars.bThirdpersonAnimate))
    {
        float dt = ImGui::GetIO().DeltaTime;
        float speed = 8.0f;
        s_currentDistance += (targetDistance - s_currentDistance) * std::min(dt * speed, 1.0f);
    }
    else
    {
        s_currentDistance = targetDistance;
    }

    bool bInThirdperson = s_currentDistance > 1.0f;

    if (bInThirdperson)
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        auto pNativeDist = reinterpret_cast<float*>(pInput + 0x254);
        *pNativeFlag = 1;
        *pNativeDist = s_currentDistance;

        pSetup->nSomeFlags |= 1;

        uintptr_t pGameSceneNode = *reinterpret_cast<uintptr_t*>(pPawn + 0x338);
        if (pGameSceneNode)
        {
            Vector_t origin = *reinterpret_cast<Vector_t*>(pGameSceneNode + 0xD0);
            Vector_t viewOffset = *reinterpret_cast<Vector_t*>(pPawn + 0xD58);
            Vector_t eye_pos = origin + viewOffset;

            auto Deg2Rad = [](float d) { return d * (3.141592654f / 180.f); };
            float sy = std::sin(Deg2Rad(pSetup->angView.y)), cy = std::cos(Deg2Rad(pSetup->angView.y));
            float sp = std::sin(Deg2Rad(pSetup->angView.x)), cp = std::cos(Deg2Rad(pSetup->angView.x));
            Vector_t forward = { cp * cy, cp * sy, -sp };

            pSetup->vecOrigin = eye_pos - (forward * s_currentDistance);
        }
    }
    else
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        *pNativeFlag = 0;
    }
спасибо огромное благодарю отпишу днем получится или нет . 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 48 8B FA E8 это что? паттерн?
 
привет! если тебе нужно реализовать 3 лицо internal методом, тебе нужен хук override view. вот реализация -

("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 48 8B FA E8")

рабочий пример реализации:
Expand Collapse Copy
    if (C_GET(bool, Vars.bThirdpersonAnimate))
    {
        float dt = ImGui::GetIO().DeltaTime;
        float speed = 8.0f;
        s_currentDistance += (targetDistance - s_currentDistance) * std::min(dt * speed, 1.0f);
    }
    else
    {
        s_currentDistance = targetDistance;
    }

    bool bInThirdperson = s_currentDistance > 1.0f;

    if (bInThirdperson)
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        auto pNativeDist = reinterpret_cast<float*>(pInput + 0x254);
        *pNativeFlag = 1;
        *pNativeDist = s_currentDistance;

        pSetup->nSomeFlags |= 1;

        uintptr_t pGameSceneNode = *reinterpret_cast<uintptr_t*>(pPawn + 0x338);
        if (pGameSceneNode)
        {
            Vector_t origin = *reinterpret_cast<Vector_t*>(pGameSceneNode + 0xD0);
            Vector_t viewOffset = *reinterpret_cast<Vector_t*>(pPawn + 0xD58);
            Vector_t eye_pos = origin + viewOffset;

            auto Deg2Rad = [](float d) { return d * (3.141592654f / 180.f); };
            float sy = std::sin(Deg2Rad(pSetup->angView.y)), cy = std::cos(Deg2Rad(pSetup->angView.y));
            float sp = std::sin(Deg2Rad(pSetup->angView.x)), cp = std::cos(Deg2Rad(pSetup->angView.x));
            Vector_t forward = { cp * cy, cp * sy, -sp };

            pSetup->vecOrigin = eye_pos - (forward * s_currentDistance);
        }
    }
    else
    {
        auto pInput = reinterpret_cast<std::uintptr_t>(I::Input);
        auto pNativeFlag = reinterpret_cast<std::uint8_t*>(pInput + 0x251);
        *pNativeFlag = 0;
    }
не хз не работает класс нужен
 
Берем хукаем
C++:
Expand Collapse Copy
client.dll 48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B 71 ? 8B DA 48 8B 4E ? 48 8D 7E ? 48 0F BA E1 ? 72 ? 85 D2 7F ? 48 8B C7 48 8B 5C 24 ? 48 8B 74 24 ? 48 83 C4 ? 5F C3 48 C1 E9 ? F6 C1 ? 75 ? B8 ? ? ? ? EB ? 48 8B 0D ? ? ? ? ? ? ? FF 90 ? ? ? ? 83 FB ? 75 ? 33 DB EB ? 85 DB 78 ? 3B D8 7D ? 48 0F BF 46 ? 48 6B C8 ? 48 8D 05 ? ? ? ? ? ? ? ? 48 63 C3 48 03 C7 48 8B 5C 24 ? 48 8B 74 24 ? 48 83 C4 ? 5F C3 48 8B 5C 24 ? 33 C0 48 8B 74 24 ? 48 83 C4 ? 5F C3 ? ? ? ? ? ? ? ? 48 0F BF C1
void* GetConvarValue( ConVar* pCvar, int nDefault )
Находим паттерн
C++:
Expand Collapse Copy
client.dll 48 85 C0 75 ? 48 8B 05 ? ? ? ? 48 8B 40 ? ? ? ? 75 ? BA ? ? ? ? 48 8D 0D ? ? ? ? E8 ? ? ? ? 48 85 C0 75 ? 48 8B 05 ? ? ? ? 48 8B 40 ? ? ? ? 75 ? 44 88 67
в хуке делаем так
C++:
Expand Collapse Copy
void* thorazine::c_hooks_manager::cvar_get_value( void* cvar, int default_value )
{
    static const auto camera_think_return = g_modules->m_client.m_camera_think_return.ptr( );
           const auto return_addr = _ReturnAddress( );

    static auto camera_think_return_value = true;

    if ( return_addr == camera_think_return )
        return &camera_think_return_value;

    return original( cvar_get_value, client )( cvar, default_value );
}
хукаем override_view
C++:
Expand Collapse Copy
client.dll 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 48 8B FA E8
void override_view( void* rcx, c_view_setup* view_setup );
в override_view перед вызовом оригинала
вызываем такую функу
C++:
Expand Collapse Copy
bool c_misc::thirdperson( ) const noexcept
{
    var( cam_collision );
    var( cam_idealdist );
    var( cam_snapto );
    var( c_thirdpersonshoulder );

    static auto progress = 0.f;

    const auto run_thirdperson = g_cfg->m_world.m_thirdperson.get( ) && g_cfg->m_world.m_thirdperson.pressed( );
    const auto distance        = std::clamp( g_cfg->m_world.m_thirdperson_distance.get( ), 40.f, 150.f );

    // fix crashing
    c_thirdpersonshoulder->set_bool( false );

    if ( run_thirdperson )
    {
        auto bezier = [ ]( const float t ) { return t * t * ( 3.0f - 2.0f * t ); };

        progress = std::clamp( progress + g_interfaces->m_globals->m_frame_time * 6.f, 40.f / distance, 1.f );
        cam_idealdist->set_float( distance * bezier( progress ) );
        cam_collision->set_bool( true );
        cam_snapto->set_bool( true );

        g_interfaces->m_csgo_input->m_thirdperson = true;
        return true;
    }
    else
    {
        progress = run_thirdperson ? 1.f : 0.f;
        g_interfaces->m_csgo_input->m_thirdperson = false;
    }

    return false;
}
 
Назад
Сверху Снизу