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

Вопрос Subtick и связанное

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
12 Янв 2017
Сообщения
13
Реакции
2
Сталкивался ли кто-то с проблемами с subtick эксплоитами (bhop/strafe)?
Например, что при bhop'е, что при strafe'ре рандомный из прыжков "отклоняется" сервером и вместо этого меня прижимает обратно к земле.
Как можно это решить и, если есть советы, как ускорить работу subtick strafe exploit?

Часть кода стрейфера
В accelerate работаю с out_velo и friction
В autostrafe сама логика стрейфера обычного
C++:
Expand Collapse Copy
vec3_t vel = sdk::m_local_pawn->m_vec_abs_velocity();
vec3_t move = sdk::m_local_pawn->m_movement_services()->m_last_movements_impulse();

const float ov_frame_time = INTERVAL_PER_TICK / 12.f;
vec3_t old_move = { sdk::m_cmd->pb.mutable_base()->forwardmove(), sdk::m_cmd->pb.mutable_base()->leftmove(), sdk::m_cmd->pb.mutable_base()->upmove() };
float fric = sdk::m_local_pawn->m_movement_services()->m_surface_friction();
for (int i = 0; i < 4; i++) {
    auto move_step = g_protobuf->add_subtick_move_step(user_cmd);
    if (!move_step)
        continue;

    float stamina = sdk::m_local_pawn->m_movement_services()->m_stamina();
    accelerate(vel, stamina, fric, move, ov_frame_time);

    auto_strafe(true, vel, ov_frame_time, stamina, fric);

    //move_correction(user_cmd, user_cmd->pb.mutable_base(), g_ctx->wish_angle , false);

    move_step->set_when((1.f / 12.f) * i);

    move_step->set_analog_forward_delta(sdk::m_cmd->pb.mutable_base()->forwardmove() - move.x);
    move_step->set_analog_left_delta(sdk::m_cmd->pb.mutable_base()->leftmove() - move.y);

    move.x += move_step->analog_forward_delta();
    move.y += move_step->analog_left_delta();
}
 
1. проверь трение и ускорение, если косяк в формулах, прыжки будут откатывать.
2. шаги сабтиков, делай их по INTERVAL_PER_TICK (0.015), а не /12.f, иначе сервак будет глотать.
3. дельты движения, не копи их а сразу вставляй нужные значения для каждого шага.
4. стрейф угол, плавно поворачивай, резкие скачки = потеря скорости.
5. меньше шагов 1-2 вместо 4 = меньше ошибок.
6. кеш данные, не дёргай каждый раз m_movement_services(), тормозить будет.

если всё равно проблема, смотри как сервак обрабатывает сабтики, возможно косяк в предикте.

C++:
Expand Collapse Copy
vec3_t vel = sdk::m_local_pawn->m_vec_abs_velocity();
auto* mov_services = sdk::m_local_pawn->m_movement_services();
float fric = mov_services->m_surface_friction();
float stamina = mov_services->m_stamina();

const float tick_interval = INTERVAL_PER_TICK;
vec3_t old_move = { sdk::m_cmd->forwardmove, ... };

for (int i = 0; i < 2; i++) {
auto move_step = g_protobuf->add_subtick_move_step(user_cmd);
if (!move_step) continue;

accelerate(vel, stamina, fric, old_move, tick_interval);
auto_strafe(true, vel, tick_interval, stamina, fric);

move_correction(...);

move_step->set_when(tick_interval * i);

move_step->set_analog_forward_delta(desired_forward - old_move.x);
move_step->set_analog_left_delta(desired_left - old_move.y);

old_move.x = desired_forward;
old_move.y = desired_left;
}
 
1. проверь трение и ускорение, если косяк в формулах, прыжки будут откатывать.
2. шаги сабтиков, делай их по INTERVAL_PER_TICK (0.015), а не /12.f, иначе сервак будет глотать.
3. дельты движения, не копи их а сразу вставляй нужные значения для каждого шага.
4. стрейф угол, плавно поворачивай, резкие скачки = потеря скорости.
5. меньше шагов 1-2 вместо 4 = меньше ошибок.
6. кеш данные, не дёргай каждый раз m_movement_services(), тормозить будет.

если всё равно проблема, смотри как сервак обрабатывает сабтики, возможно косяк в предикте.

C++:
Expand Collapse Copy
vec3_t vel = sdk::m_local_pawn->m_vec_abs_velocity();
auto* mov_services = sdk::m_local_pawn->m_movement_services();
float fric = mov_services->m_surface_friction();
float stamina = mov_services->m_stamina();

const float tick_interval = INTERVAL_PER_TICK;
vec3_t old_move = { sdk::m_cmd->forwardmove, ... };

for (int i = 0; i < 2; i++) {
auto move_step = g_protobuf->add_subtick_move_step(user_cmd);
if (!move_step) continue;

accelerate(vel, stamina, fric, old_move, tick_interval);
auto_strafe(true, vel, tick_interval, stamina, fric);

move_correction(...);

move_step->set_when(tick_interval * i);

move_step->set_analog_forward_delta(desired_forward - old_move.x);
move_step->set_analog_left_delta(desired_left - old_move.y);

old_move.x = desired_forward;
old_move.y = desired_left;
}
Шагов 4 - ошибка, тестил и забыл поменять, должно быть 12
Спасибо!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу