Вопрос 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
Спасибо!
 
Назад
Сверху Снизу