• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Edgebug don't pointing correctly

Начинающий
Начинающий
Статус
Онлайн
Регистрация
18 Авг 2020
Сообщения
69
Реакции
3
написал edgebug на Left4Dead2 игра разработана на одном движке как и CS:GO. так вот, я нашёл детект эджбага, он срабатывает нормально а бывает я пролетаю дальше текстуры или вообще возле конца текстуры врезаюсь. хотел бы у знатоков спросить как можно пофиксить, могу скинуть предикт и сам эджбаг.
 
щас по сперме мамонта погадаю что у тебя в коде нетак
 
щас по сперме мамонта погадаю что у тебя в коде нетак
Код:
Expand Collapse Copy
inline bool edgebug_detected(const vector3d& old_vel, const vector3d& new_vel) {
    const auto sv_gravity = 800.f;

    if (old_vel.lenght_2d() <= new_vel.lenght_2d())
    {

        float ebzvel = sv_gravity * 0.5f * interfaces::global_vars->interval_per_tick * 0.9f;

        if (-ebzvel > old_vel.z && round(new_vel.z) == round(-ebzvel))
        {
            return true;
        }
    }
    
    return false;

}


Код:
Expand Collapse Copy
if (edgebug_t.detected) {
        interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);
        if (interfaces::global_vars->tick_count > edgebug_t.activation_tick || backup.flags & fl_onground) {
            edgebug_t.detected = false;
            return;
        }

        interfaces::engine_client->set_view_angles(edgebug_t.target_angles);

        cmd->forward_move = cmd->side_move = 0.f;

        if (edgebug_t.should_duck)
            cmd->buttons |= in_duck;
        else
            cmd->buttons &= ~in_duck;

        return;
    }
    else {
        for (int t = 0; t < 2; t++) {
            interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);

            user_cmd simulated_cmd = *cmd;

            if (t) {
                edgebug_t.should_duck = true;
                simulated_cmd.buttons |= in_duck;
                local_player->m_fFlags() |= fl_ducking;

            }
            else {
                edgebug_t.should_duck = false;
                simulated_cmd.buttons &= ~in_duck;
                local_player->m_fFlags() &= ~fl_ducking;
            }

            simulated_cmd.side_move = simulated_cmd.forward_move = 0.f;

            for (int i = 0; i < 32; i++) {
            
                vector3d old_velocity = local_player->m_vecVelocity();
                 int old_flags = local_player->m_fFlags();

                if (old_flags & fl_onground || old_velocity.z > 0.f)
                    break;

                engine_system::start(local_player, &simulated_cmd);
                engine_system::finish(local_player);

                if (edgebug_detected(old_velocity, local_player->m_vecVelocity()) && !(local_player->m_fFlags() & 1))
                {
                    edgebug_t.detected = true;
                    edgebug_t.activation_tick = interfaces::global_vars->tick_count + i;
                    edgebug_t.target_angles = cmd->view_angles;
                    edgebug_t.predicted_origin = local_player->m_vecOrigin();
                    edgebug_t.predicted_velocity = local_player->m_vecVelocity();
                    break;
                }

                if (local_player->m_fFlags() & fl_onground || local_player->m_vecVelocity().z > 0.f)
                    break;

                old_velocity = local_player->m_vecVelocity();
                old_flags = local_player->m_fFlags();
            }
        }
    }
 
Код:
Expand Collapse Copy
inline bool edgebug_detected(const vector3d& old_vel, const vector3d& new_vel) {
    const auto sv_gravity = 800.f;

    if (old_vel.lenght_2d() <= new_vel.lenght_2d())
    {

        float ebzvel = sv_gravity * 0.5f * interfaces::global_vars->interval_per_tick * 0.9f;

        if (-ebzvel > old_vel.z && round(new_vel.z) == round(-ebzvel))
        {
            return true;
        }
    }
   
    return false;

}


Код:
Expand Collapse Copy
if (edgebug_t.detected) {
        interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);
        if (interfaces::global_vars->tick_count > edgebug_t.activation_tick || backup.flags & fl_onground) {
            edgebug_t.detected = false;
            return;
        }

        interfaces::engine_client->set_view_angles(edgebug_t.target_angles);

        cmd->forward_move = cmd->side_move = 0.f;

        if (edgebug_t.should_duck)
            cmd->buttons |= in_duck;
        else
            cmd->buttons &= ~in_duck;

        return;
    }
    else {
        for (int t = 0; t < 2; t++) {
            interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);

            user_cmd simulated_cmd = *cmd;

            if (t) {
                edgebug_t.should_duck = true;
                simulated_cmd.buttons |= in_duck;
                local_player->m_fFlags() |= fl_ducking;

            }
            else {
                edgebug_t.should_duck = false;
                simulated_cmd.buttons &= ~in_duck;
                local_player->m_fFlags() &= ~fl_ducking;
            }

            simulated_cmd.side_move = simulated_cmd.forward_move = 0.f;

            for (int i = 0; i < 32; i++) {
           
                vector3d old_velocity = local_player->m_vecVelocity();
                 int old_flags = local_player->m_fFlags();

                if (old_flags & fl_onground || old_velocity.z > 0.f)
                    break;

                engine_system::start(local_player, &simulated_cmd);
                engine_system::finish(local_player);

                if (edgebug_detected(old_velocity, local_player->m_vecVelocity()) && !(local_player->m_fFlags() & 1))
                {
                    edgebug_t.detected = true;
                    edgebug_t.activation_tick = interfaces::global_vars->tick_count + i;
                    edgebug_t.target_angles = cmd->view_angles;
                    edgebug_t.predicted_origin = local_player->m_vecOrigin();
                    edgebug_t.predicted_velocity = local_player->m_vecVelocity();
                    break;
                }

                if (local_player->m_fFlags() & fl_onground || local_player->m_vecVelocity().z > 0.f)
                    break;

                old_velocity = local_player->m_vecVelocity();
                old_flags = local_player->m_fFlags();
            }
        }
    }
что за 0.9? если игра действительно на одном движке то и вычисление будут одинаковые
 
что за 0.9? если игра действительно на одном движке то и вычисление будут одинаковые
left4dead2 там более старый движок, вроде как в counter strike source или half life 2. 0.9 это чтобы получить -12.f именно на этой скорости детектится эджбаг , если точнее то -12.333334.
 
left4dead2 там более старый движок, вроде как в counter strike source или half life 2. 0.9 это чтобы получить -12.f именно на этой скорости детектится эджбаг , если точнее то -12.333334.
Так ты уже определись, на какой версии движка игра работает.
Версию движка у ксс много раз обновляли, тут нужна конкретика.
Version напиши в консоль и покажи вывод
 
Так ты уже определись, на какой версии движка игра работает.
Версию движка у ксс много раз обновляли, тут нужна конкретика.
Version напиши в консоль и покажи вывод

Version 2.2.4.3 (left4dead2)
Network Version 2.1.0.0
Exe build: 14:34:57 Jan 16 2025 (9477) (550)
CAsyncWavDataCache: 2 .wavs total 0 bytes, 0.00 % of capacity
 
Version 2.2.4.3 (left4dead2)
Network Version 2.1.0.0
Exe build: 14:34:57 Jan 16 2025 (9477) (550)
CAsyncWavDataCache: 2 .wavs total 0 bytes, 0.00 % of capacity
если это хл 2 движок, то рассчет с ксго должен быть верным

Gravity LOL:
Expand Collapse Copy
void CGameMovement::AddGravity( void )
{
    float ent_gravity;

    if ( player->m_flWaterJumpTime )
        return;

    if (player->GetGravity())
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Add gravity incorrectly
    mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * gpGlobals->frametime);
    mv->m_vecVelocity[2] += player->GetBaseVelocity()[2] * gpGlobals->frametime;
    Vector temp = player->GetBaseVelocity();
    temp[2] = 0;
    player->SetBaseVelocity( temp );
    
    CheckVelocity();
}

void CGameMovement::StartGravity( void )
{
    float ent_gravity;
    
    if (player->GetGravity())
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Add gravity so they'll be in the correct position during movement
    // yes, this 0.5 looks wrong, but it's not.  
    mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * 0.5 * gpGlobals->frametime );
    mv->m_vecVelocity[2] += player->GetBaseVelocity()[2] * gpGlobals->frametime;

    Vector temp = player->GetBaseVelocity();
    temp[ 2 ] = 0;
    player->SetBaseVelocity( temp );

    CheckVelocity();
}


void CGameMovement::FinishGravity( void )
{
    float ent_gravity;

    if ( player->m_flWaterJumpTime )
        return;

    if ( player->GetGravity() )
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Get the correct velocity for the end of the dt
      mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * gpGlobals->frametime * 0.5);

    CheckVelocity();
}
 
если это хл 2 движок, то рассчет с ксго должен быть верным

Gravity LOL:
Expand Collapse Copy
void CGameMovement::AddGravity( void )
{
    float ent_gravity;

    if ( player->m_flWaterJumpTime )
        return;

    if (player->GetGravity())
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Add gravity incorrectly
    mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * gpGlobals->frametime);
    mv->m_vecVelocity[2] += player->GetBaseVelocity()[2] * gpGlobals->frametime;
    Vector temp = player->GetBaseVelocity();
    temp[2] = 0;
    player->SetBaseVelocity( temp );
  
    CheckVelocity();
}

void CGameMovement::StartGravity( void )
{
    float ent_gravity;
  
    if (player->GetGravity())
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Add gravity so they'll be in the correct position during movement
    // yes, this 0.5 looks wrong, but it's not.
    mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * 0.5 * gpGlobals->frametime );
    mv->m_vecVelocity[2] += player->GetBaseVelocity()[2] * gpGlobals->frametime;

    Vector temp = player->GetBaseVelocity();
    temp[ 2 ] = 0;
    player->SetBaseVelocity( temp );

    CheckVelocity();
}


void CGameMovement::FinishGravity( void )
{
    float ent_gravity;

    if ( player->m_flWaterJumpTime )
        return;

    if ( player->GetGravity() )
        ent_gravity = player->GetGravity();
    else
        ent_gravity = 1.0;

    // Get the correct velocity for the end of the dt
      mv->m_vecVelocity[2] -= (ent_gravity * GetCurrentGravity() * gpGlobals->frametime * 0.5);

    CheckVelocity();
}

я проверял, не детектит.
который я скорректировал он рабочий
вот у меня получилось словить пару эджбагов
 
Последнее редактирование:
в предикте может проблема?
все может быть, есть пару моментов которые меня смущают по коду, но я не думаю что это повлияет, а вообще такое чувство что ты далеко от истины...
 
Последнее редактирование:
все может быть, есть пару моментов которые меня смущают по коду, но я не думаю что это повлияет, а вообще такое чувство что ты далеко от истины...
:cry: я и с помощью трейсеров проверку делал, тоже самое происходит
 
Назад
Сверху Снизу