Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Как зафиксить вьюмодель в лв3

Статус
В этой теме нельзя размещать новые ответы.
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
26 Дек 2022
Сообщения
3
Реакции
0
Приветсвую! Кто может подсказать, как зафиксить вьюмодль в лв3? я немогу понять, где лежат все необходимые оффесеты для него
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а что с ним не так?
 
я не понимаю как ты не можешь найти оффсета на это, просто посмотри как вьюмодел вызывается у тя в чите, вот для лв, это неправильный, показал где он

misc.cpp:
Expand Collapse Copy
if (g_cfg.esp.viewmodel_x)
    {
        auto viewX = (float)g_cfg.esp.viewmodel_x / 2.0f;
        static auto viewXcvar = m_cvar()->FindVar(crypt_str("viewmodel_offset_x"));

        if (viewXcvar->GetFloat() != viewX) //-V550
        {
            *(float*)((DWORD)&viewXcvar->m_fnChangeCallbacks + 0xC) = 0.0f;
            viewXcvar->SetValue(viewX);
        }
    }
а что с ним не так?
ограничение самой игрой, выше значения не можешь ставить, нужен офсет чтобы заработало обратно
 
я не понимаю как ты не можешь найти оффсета на это, просто посмотри как вьюмодел вызывается у тя в чите, вот для лв, это неправильный, показал где он

misc.cpp:
Expand Collapse Copy
if (g_cfg.esp.viewmodel_x)
    {
        auto viewX = (float)g_cfg.esp.viewmodel_x / 2.0f;
        static auto viewXcvar = m_cvar()->FindVar(crypt_str("viewmodel_offset_x"));

        if (viewXcvar->GetFloat() != viewX) //-V550
        {
            *(float*)((DWORD)&viewXcvar->m_fnChangeCallbacks + 0xC) = 0.0f;
            viewXcvar->SetValue(viewX);
        }
    }

ограничение самой игрой, выше значения не можешь ставить, нужен офсет чтобы заработало обратно
я знаю, что я тупой, но у меня не получается подобрать нужные оффесеты для xyz. можешь, пожалуйста, помочь?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Valve ограничивает значение кваров, это заметно когда ты пытаешься их изменить.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
1672129212367.png

1672129278994.png

Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
Expand Collapse Copy
// #STR: "ConVarBackups", "viewmodel_offset_fov"
// module: client.dll; sig: 55 8B EC 83 E4 F8 A1 ?? ?? ?? ?? 83 EC 08 B9 ?? ?? ?? ?? FF 50 ?? 6A 00 85 C0 74 23 83 EC 08 C7 44 24 04 00 00 88
void __cdecl hooks::hk_viewmodel_fov_callback( ) {
    return;
}

2 способ
В хуке OverrideView пишем подобный код:
C++:
Expand Collapse Copy
void __fastcall hooks::hk_override_view( void* ecx, void* edx, c_view_setup* setup_view ) {
    const auto view_model = i::m_entity_list->get_client_entity_from_handle( ctx::local( )->get_view_model( ) );

    c_vec3 forward{}, right{}, up{};
    math::angle_vectors( view_model->get_abs_angles( ), &forward, &right, &up );

    static const auto set_pos_fn = reinterpret_cast< void( __thiscall* )( void*, const c_vec3& ) >(
        utils::sig( m::m_client_dll, _( "55 8B EC 83 E4 F8 51 53 56 57 8B F1 E8" ) ) );
    set_pos_fn( view_model, view_model->get_abs_origin( ) + forward * forward_factor + up * up_factor + right * right_factor );
}

3 способ
Мы можем перехватить функцию, которая выставляет значения viewmodel`a и модифицировать их под себя.
C++:
Expand Collapse Copy
//module: client.dll; sig: 55 8B EC 8B 45 08 F3 0F 7E 45
int __fastcall hooks::hk_set_viewmodel( void* ecx, void* edx, int unk, float x, float y, float z ) {
    if ( g_cfg.m_misc.m_change_viewmodel ) {
        x = static_cast< float >( g_cfg.m_misc.m_viewmodel_x );
        y = static_cast< float >( g_cfg.m_misc.m_viewmodel_y );
        z = static_cast< float >( g_cfg.m_misc.m_viewmodel_z );
    }
    return og::m_set_viewmodel( ecx, edx, unk, x, y, z );
}

4 способ
Мы можем хукнуть sv_competitive_minspec. Кода не будет — задача для читателя.
Подсказка на первом скрине.
 
Valve ограничивает число переменных, когда ты пытаешься изменить квар.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
Посмотреть вложение 233069
Посмотреть вложение 233070
Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
Expand Collapse Copy
// #STR: "ConVarBackups", "viewmodel_offset_fov"
// module: client.dll; sig: 55 8B EC 83 E4 F8 A1 ?? ?? ?? ?? 83 EC 08 B9 ?? ?? ?? ?? FF 50 ?? 6A 00 85 C0 74 23 83 EC 08 C7 44 24 04 00 00 88
void __cdecl hooks::hk_viewmodel_fov_callback( ) {
    return;
}

2 способ
В хуке OverrideView пишем подобный код:
C++:
Expand Collapse Copy
void __fastcall hooks::hk_override_view( void* ecx, void* edx, c_view_setup* setup_view ) {
    const auto view_model = i::m_entity_list->get_client_entity_from_handle( ctx::local( )->get_view_model( ) );

    c_vec3 forward{}, right{}, up{};
    math::angle_vectors( view_model->get_abs_angles( ), &forward, &right, &up );

    static const auto set_pos_fn = reinterpret_cast< void( __thiscall* )( void*, const c_vec3& ) >(
        utils::sig( m::m_client_dll, _( "55 8B EC 83 E4 F8 51 53 56 57 8B F1 E8" ) ) );
    set_pos_fn( view_model, view_model->get_abs_origin( ) + forward * forward_factor + up * up_factor + right * right_factor );
}

3 способ
Мы можем перехватить функцию, которая выставляет значения viewmodel`a и модифицировать их под себя.
C++:
Expand Collapse Copy
//module: client.dll; sig: 55 8B EC 8B 45 08 F3 0F 7E 45
int __fastcall hooks::hk_set_viewmodel( void* ecx, void* edx, int unk, float x, float y, float z ) {
    if ( g_cfg.m_misc.m_change_viewmodel ) {
        x = static_cast< float >( g_cfg.m_misc.m_viewmodel_x );
        y = static_cast< float >( g_cfg.m_misc.m_viewmodel_y );
        z = static_cast< float >( g_cfg.m_misc.m_viewmodel_z );
    }
    return og::m_set_viewmodel( ecx, edx, unk, x, y, z );
}

4 способ
Мы можем хукнуть sv_competitive_minspec. Кода не будет — задача для читателя.
Подсказка на первом скрине.
О, спасибо, такое мне надо
 
Valve ограничивает число переменных, когда ты пытаешься изменить квар.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
Посмотреть вложение 233069
Посмотреть вложение 233070
Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
Expand Collapse Copy
// #STR: "ConVarBackups", "viewmodel_offset_fov"
// module: client.dll; sig: 55 8B EC 83 E4 F8 A1 ?? ?? ?? ?? 83 EC 08 B9 ?? ?? ?? ?? FF 50 ?? 6A 00 85 C0 74 23 83 EC 08 C7 44 24 04 00 00 88
void __cdecl hooks::hk_viewmodel_fov_callback( ) {
    return;
}

2 способ
В хуке OverrideView пишем подобный код:
C++:
Expand Collapse Copy
void __fastcall hooks::hk_override_view( void* ecx, void* edx, c_view_setup* setup_view ) {
    const auto view_model = i::m_entity_list->get_client_entity_from_handle( ctx::local( )->get_view_model( ) );
 
    c_vec3 forward{}, right{}, up{};
    math::angle_vectors( view_model->get_abs_angles( ), &forward, &right, &up );
 
    static const auto set_pos_fn = reinterpret_cast< void( __thiscall* )( void*, const c_vec3& ) >(
        utils::sig( m::m_client_dll, _( "55 8B EC 83 E4 F8 51 53 56 57 8B F1 E8" ) ) );
    set_pos_fn( view_model, view_model->get_abs_origin( ) + forward * forward_factor + up * up_factor + right * right_factor );
}

3 способ
Мы можем перехватить функцию, которая выставляет значения viewmodel`a и модифицировать их под себя.
C++:
Expand Collapse Copy
//module: client.dll; sig: 55 8B EC 8B 45 08 F3 0F 7E 45
int __fastcall hooks::hk_set_viewmodel( void* ecx, void* edx, int unk, float x, float y, float z ) {
    if ( g_cfg.m_misc.m_change_viewmodel ) {
        x = static_cast< float >( g_cfg.m_misc.m_viewmodel_x );
        y = static_cast< float >( g_cfg.m_misc.m_viewmodel_y );
        z = static_cast< float >( g_cfg.m_misc.m_viewmodel_z );
    }
    return og::m_set_viewmodel( ecx, edx, unk, x, y, z );
}

4 способ
Мы можем хукнуть sv_competitive_minspec. Кода не будет — задача для читателя.
Подсказка на первом скрине.
Ого, спасибо, что все подробно объяснил и предложил несколько способов. Я же думал что мне никто толком не расскажет :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу