Модератор раздела «Создание читов CS2»
-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Возможно, вы когда либо сталкивались с проблемой, когда питч опускается вниз на 89 градусов, при приземлении ваша камера очень странно тряслась.
Как это выглядит:
Первым делом вы пойдете в интернет и найдете относительно старую тему на unknowncheats (
Поэтому, хочу показать актуальное решение этой проблемы.
Первым делом я начал с наблюдения поведения этого бага. Я смог увидеть, что камера трясется только от первого лица, а не от третьего и так далее. (запоминаем этот фактор !!!)
Открываем ликнутый код игры, находим код отвечающий за тряску камеры при приземлении, дабы сделать так званый "ребилд". (
Открываем иду, чтобы сверить ликнутый код с актуальным.
Получив всю нужную информацию, хукаем эту функцию.
Ребилда нам мало, он особо ничего не даст. Нам нужно избежать вызов функции modify eye position, дабы не производить тряску камеры.
Смотрим где вызывается эта функция.
Видим, что она вызывается в двух функциях -
Далее, если логически подумать и посмотреть код обоих функций, можно понять, что первая функция нам не нужна (она отвечает за получение позиции выстрела, а вторая функция за расчет позиции камеры. если этого фактора нам мало - вспоминаем то, что я говорил в начале, что тряска камеры производится только от первого лица. смотрим
Разобравшись какая функция нам нужна, снова, на всякий случай, сверяем с кодом модуля.
Видим, что ничего не поменялось, предотвращаем вызов функции modify eye position.
Для этого смотрим условия вызова этой функции, видим, что все что нам нужно сделать - это просто изменить значение m_bUseNewAnimstate на false, дабы не сработало
Хукаем.
Готово! Итого получаем:
Как это выглядит:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Первым делом вы пойдете в интернет и найдете относительно старую тему на unknowncheats (
Пожалуйста, авторизуйтесь для просмотра ссылки.
). Спастите код, который там дадут, но он ничего не принесет, у вас все еще останется этот баг.Поэтому, хочу показать актуальное решение этой проблемы.
Первым делом я начал с наблюдения поведения этого бага. Я смог увидеть, что камера трясется только от первого лица, а не от третьего и так далее. (запоминаем этот фактор !!!)
Открываем ликнутый код игры, находим код отвечающий за тряску камеры при приземлении, дабы сделать так званый "ребилд". (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)Открываем иду, чтобы сверить ликнутый код с актуальным.
Получив всю нужную информацию, хукаем эту функцию.
C++:
/* @ida: module: client.dll; sig: 55 8B EC 83 E4 F8 83 EC 70 56 57 8B F9 89 7C 24 14 83 7F 60 */
void __fastcall c_hooks::hk_modify_eye_position(void* ecx, void* edx, vec3_t& input_eye_pos)
{
const auto animation_state = static_cast<anim_state_t*>(ecx);
if (!animation_state)
return g_sdk.m_hooks_data.m_originals.m_modify_eye_position(ecx, edx, input_eye_pos);
if (!animation_state->m_landing && animation_state->m_anim_duck_amount == 0.0f)
{
animation_state->m_smooth_height_valid = false;
animation_state->m_camera_smooth_height = 0x7F7FFFFF;
return;
}
using bone_lookup_fn = int(__thiscall*)(void*, const char*);
static auto lookup_bone = reinterpret_cast<bone_lookup_fn>(c_utils::find_sig(client_dll, _("55 8B EC 53 56 8B F1 57 83 BE ? ? ? ? ? 75 14 8B 46 04 8D 4E 04 FF 50 20 85 C0 74 07 8B CE E8 ? ? ? ? 8B 8E ? ? ? ? 85 C9 0F 84")));
auto head_pos = animation_state->m_player->get_cached_bone_data()[lookup_bone(animation_state->m_player, "head_0")].at(3);
head_pos.z += 1.7f;
if (input_eye_pos.z > head_pos.z)
{
const auto lol = abs(input_eye_pos.z - head_pos.z);
const auto v22 = (lol - 4.0) * 0.16666667;
float v23;
if (v22 >= 0.0)
v23 = fminf(v22, 1.0);
else
v23 = 0.0;
input_eye_pos.z = (head_pos.z - input_eye_pos.z) * (v23 * v23 * 3.0 - v23 * v23 * 2.0 * v23) +
input_eye_pos.z;
}
}
Смотрим где вызывается эта функция.
Видим, что она вызывается в двух функциях -
Пожалуйста, авторизуйтесь для просмотра ссылки.
и
Пожалуйста, авторизуйтесь для просмотра ссылки.
Далее, если логически подумать и посмотреть код обоих функций, можно понять, что первая функция нам не нужна (она отвечает за получение позиции выстрела, а вторая функция за расчет позиции камеры. если этого фактора нам мало - вспоминаем то, что я говорил в начале, что тряска камеры производится только от первого лица. смотрим
Пожалуйста, авторизуйтесь для просмотра ссылки.
и
Пожалуйста, авторизуйтесь для просмотра ссылки.
второй функции и понимаем, что это то, что нам нужно).Разобравшись какая функция нам нужна, снова, на всякий случай, сверяем с кодом модуля.
Видим, что ничего не поменялось, предотвращаем вызов функции modify eye position.
Для этого смотрим условия вызова этой функции, видим, что все что нам нужно сделать - это просто изменить значение m_bUseNewAnimstate на false, дабы не сработало
Пожалуйста, авторизуйтесь для просмотра ссылки.
.Хукаем.
C++:
void __fastcall c_hooks::calculate_view(void* ecx, void* edx, vec3_t& eye_origin, qangle_t& eye_angles, float& z_near, float& z_far, float& fov)
{
/* @ida: module: client.dll; sig: 55 8B EC 83 EC 14 53 56 57 FF 75 18 */
/* @note: should_use_new_animstate offset - 0x9B14 */
const auto player = static_cast<c_base_player*>(ecx);
if (!player || !g_sdk.m_local() || player != g_sdk.m_local())
return g_sdk.m_hooks_data.m_originals.m_calculate_view(ecx, edx, eye_origin, eye_angles, z_near, z_far, fov);
const auto backup_use_new_anim_state = player->should_use_new_anim_state();
player->should_use_new_anim_state() = false;
{
g_sdk.m_hooks_data.m_originals.m_calculate_view(ecx, edx, eye_origin, eye_angles, z_near, z_far, fov);
}
player->should_use_new_anim_state() = backup_use_new_anim_state;
}
Пожалуйста, авторизуйтесь для просмотра ссылки.