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

Статус
В этой теме нельзя размещать новые ответы.
Начинающий
Статус
Оффлайн
Регистрация
26 Дек 2022
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Приветсвую! Кто может подсказать, как зафиксить вьюмодль в лв3? я немогу понять, где лежат все необходимые оффесеты для него
 
like amiri in my mind
Пользователь
Статус
Оффлайн
Регистрация
4 Дек 2022
Сообщения
308
Реакции[?]
54
Поинты[?]
1K
я не понимаю как ты не можешь найти оффсета на это, просто посмотри как вьюмодел вызывается у тя в чите, вот для лв, это неправильный, показал где он

misc.cpp:
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);
        }
    }
а что с ним не так?
ограничение самой игрой, выше значения не можешь ставить, нужен офсет чтобы заработало обратно
 
Начинающий
Статус
Оффлайн
Регистрация
26 Дек 2022
Сообщения
3
Реакции[?]
0
Поинты[?]
0
я не понимаю как ты не можешь найти оффсета на это, просто посмотри как вьюмодел вызывается у тя в чите, вот для лв, это неправильный, показал где он

misc.cpp:
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. можешь, пожалуйста, помочь?
 
Модератор раздела «Создание читов CS2»
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2022
Сообщения
148
Реакции[?]
366
Поинты[?]
155K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Valve ограничивает значение кваров, это заметно когда ты пытаешься их изменить.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
1672129212367.png
1672129278994.png
Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
// #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++:
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++:
//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. Кода не будет — задача для читателя.
Подсказка на первом скрине.
 
Начинающий
Статус
Оффлайн
Регистрация
3 Дек 2021
Сообщения
16
Реакции[?]
1
Поинты[?]
0
Valve ограничивает число переменных, когда ты пытаешься изменить квар.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
Посмотреть вложение 233069
Посмотреть вложение 233070
Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
// #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++:
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++:
//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. Кода не будет — задача для читателя.
Подсказка на первом скрине.
О, спасибо, такое мне надо
 
Начинающий
Статус
Оффлайн
Регистрация
26 Дек 2022
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Valve ограничивает число переменных, когда ты пытаешься изменить квар.
Это работает не со всеми кварами, а с некоторыми, например: cl_interp, cl_updaterate, cl_interp_ratio и другие.
Вот код лимита значения на примере viewmodel_fov:
Посмотреть вложение 233069
Посмотреть вложение 233070
Многие исходники форсят нулевое значение переменной ChangeCallback — это правильно, но есть и ряд других реализаций обхода.
И вместо такой реализации я предлагаю свои способы:

1 способ
Выше я привел скрин, на котором мы видим лимит значений, почему бы просто не перехватить функцию и просто "удалить" код возврата.
C++:
// #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++:
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++:
//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. Кода не будет — задача для читателя.
Подсказка на первом скрине.
Ого, спасибо, что все подробно объяснил и предложил несколько способов. Я же думал что мне никто толком не расскажет :)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу