Розыгрыш Premium и Уникальной юзергруппы на форуме! Перейти

LBY Breaker живёт своей жизнью...

Эксперт
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции
420
C++:
Expand Collapse Copy
bool antiaim::next_lby_update()
{
    if (!g_ctx.m_local)
        return false;

    static float next_lby_update_time = 0;
    float curtime = g_csgo.m_globals()->m_curtime;


    auto animstate = g_ctx.m_local->get_animation_state();

    if (!animstate)
        return false;

    if (!(g_ctx.m_local->m_fFlags() & FL_ONGROUND))
        return false;

    if (animstate->m_velocity > 0.1f)
    {
        next_lby_update_time = curtime + 0.22f;
    }

    if (next_lby_update_time < curtime)
    {
        next_lby_update_time = curtime + 1.1f;
        return true;
    }

    return false;
}

Юзал этот брикер ещё со времен древнего и еб**го заманвара. Работал как часы, без проблем.

А вот сейчас этот брикер вообще своей жизнью живёт, мало того, что раньше он через раз работал, когда ты вставал после мувов, так потом он начал уже на стендах ломаться. А сейчас вообще хрен пойми что, он живёт своей жизнью, работает через раз.

Что мне нужно здесь исправить, чтобы получить идеальный брикер? Что б прям встал в стенд позу и почти сразу же брикало угол правильно. Спасайте, поцаны, ибо джиттера маловато
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
юзаю такой брикер, в моем стакане он заебись работает
Код:
Expand Collapse Copy
bool Updates()
{
    C_BasePlayer* pLocal = (C_BasePlayer*)I::EntityList()->GetClientEntity(I::Engine()->Getlocal());
    static bool willupdate;
    static bool WasMoving;
    if (local->IsAlive())
    {
        NetChannelInfo *nci = I::Engine->GetNetChannelInformation();
        static float LastLBYUpdateTime = 0;
        float flservertime = local->TickBase() * I::GlobalsVars()->interval_per_tick;
        if (((local->Velocity().Length2D() > 0.1) || (!local->GetRenderFlags() & FL_ONGROUND)) && (!Globals::Fakewalking))
        {
            WasMoving = true;
        }
        else if (flservertime>= (LastLBYUpdateTime + 1 - (Latency() * 2)) && ((local->Velocity().Length2D() < 0.1 && local->GetRenderFlags() & FL_ONGROUND) || (Globals::Fakewalking && local->GetRenderFlags() & FL_ONGROUND)))
        {
            if (WasMoving)
            {
                LastLBYUpdateTime = server_time + 0.22f;
                willupdate = true;
            }
            else
            {
                LastLBYUpdateTime = server_time + 1.125f;
                willupdate = true;
            }

        }
        else
        {
            willupdate = false;
        }
    }
    else
    {
        willupdate = false;
    }

    return willupdate;
}

void BreakLBY(UserCmd * cmd, bool & SendPacket)
{

    if (!SendPacket)
    {
        cmd->viewangles->y += Options.lbyfake.GetFloat();
    }
    else {
        cmd->viewangles->y -= Options.lbyreal.GetFloat();
    }

    if (Updates)
    {
        SendPacket = true;

        cmd->viewangles->y += 180.f;
    }
}
 
юзаю такой брикер, в моем стакане он заебись работает
Код:
Expand Collapse Copy
bool Updates()
{
    C_BasePlayer* pLocal = (C_BasePlayer*)I::EntityList()->GetClientEntity(I::Engine()->Getlocal());
    static bool willupdate;
    static bool WasMoving;
    if (local->IsAlive())
    {
        NetChannelInfo *nci = I::Engine->GetNetChannelInformation();
        static float LastLBYUpdateTime = 0;
        float flservertime = local->TickBase() * I::GlobalsVars()->interval_per_tick;
        if (((local->Velocity().Length2D() > 0.1) || (!local->GetRenderFlags() & FL_ONGROUND)) && (!Globals::Fakewalking))
        {
            WasMoving = true;
        }
        else if (flservertime>= (LastLBYUpdateTime + 1 - (Latency() * 2)) && ((local->Velocity().Length2D() < 0.1 && local->GetRenderFlags() & FL_ONGROUND) || (Globals::Fakewalking && local->GetRenderFlags() & FL_ONGROUND)))
        {
            if (WasMoving)
            {
                LastLBYUpdateTime = server_time + 0.22f;
                willupdate = true;
            }
            else
            {
                LastLBYUpdateTime = server_time + 1.125f;
                willupdate = true;
            }

        }
        else
        {
            willupdate = false;
        }
    }
    else
    {
        willupdate = false;
    }

    return willupdate;
}

void BreakLBY(UserCmd * cmd, bool & SendPacket)
{

    if (!SendPacket)
    {
        cmd->viewangles->y += Options.lbyfake.GetFloat();
    }
    else {
        cmd->viewangles->y -= Options.lbyreal.GetFloat();
    }

    if (Updates)
    {
        SendPacket = true;

        cmd->viewangles->y += 180.f;
    }
}
спасибо, я попробую
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
bool antiaim::next_lby_update()
{
    if (!g_ctx.m_local)
        return false;

    static float next_lby_update_time = 0;
    float curtime = g_csgo.m_globals()->m_curtime;


    auto animstate = g_ctx.m_local->get_animation_state();

    if (!animstate)
        return false;

    if (!(g_ctx.m_local->m_fFlags() & FL_ONGROUND))
        return false;

    if (animstate->m_velocity > 0.1f)
    {
        next_lby_update_time = curtime + 0.22f;
    }

    if (next_lby_update_time < curtime)
    {
        next_lby_update_time = curtime + 1.1f;
        return true;
    }

    return false;
}

Юзал этот брикер ещё со времен древнего и еб**го заманвара. Работал как часы, без проблем.

А вот сейчас этот брикер вообще своей жизнью живёт, мало того, что раньше он через раз работал, когда ты вставал после мувов, так потом он начал уже на стендах ломаться. А сейчас вообще хрен пойми что, он живёт своей жизнью, работает через раз.

Что мне нужно здесь исправить, чтобы получить идеальный брикер? Что б прям встал в стенд позу и почти сразу же брикало угол правильно. Спасайте, поцаны, ибо джиттера маловато
Кинь где ты его вызываешь
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
хм, я больше 0.7 не ставил xDD
если у тебя все идеально работает и твои индикаторы лбу показывают именно то, что нужно, совпадает с углом который под который ты брикаешь, то не вижу смысла играться. Пускай будет так как оно есть)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
если у тебя все идеально работает и твои индикаторы лбу показывают именно то, что нужно, совпадает с углом который под который ты брикаешь, то не вижу смысла играться. Пускай будет так как оно есть)
0.1 - 0.7 оптимальные варианты, т.к если ставить больше - лбу будет ломаться(либо не будет разницы между меньшим и большим значением, вообщем, ты понял). 0.1 - идеальное значение, которое более менее подошло.
 
Пожалуйста, авторизуйтесь для просмотра ссылки.

убираешь проверку на choked commands( после фикса фейков анимации обновляются каждый тик ), заменяешь весь код с аллокацией и обновление анимстейта на UpdateClientSideAnimation, готовая паста:

Код:
Expand Collapse Copy
// не забываем про https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/client/cdll_client_int.cpp#L2153
local_player->va_angle() = cmd->viewangles;
local_player->update_client_side_animation();

if (animstate->velocity > 0.0f || abs(animstate->up_speed) > 100.0f)
    lby_update = tickbase + 0.22;
else if (AngleDiff(cmd->viewangles.yaw, animstate->abs_rotation) > 35.0f )
     lby_update = tickbase + 1.1;
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а зачем те брикер? что бы, что?
 
Пожалуйста, авторизуйтесь для просмотра ссылки.

убираешь проверку на choked commands( после фикса фейков анимации обновляются каждый тик ), заменяешь весь код с аллокацией и обновление анимстейта на UpdateClientSideAnimation, готовая паста:

Код:
Expand Collapse Copy
// не забываем про https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/client/cdll_client_int.cpp#L2153
local_player->va_angle() = cmd->viewangles;
local_player->update_client_side_animation();

if (animstate->velocity > 0.0f || abs(animstate->up_speed) > 100.0f)
    lby_update = tickbase + 0.22;
else if (AngleDiff(cmd->viewangles.yaw, animstate->abs_rotation) > 35.0f )
     lby_update = tickbase + 1.1;
Спасибо. Нужно попробовать.
Давай это, пили свой софт. Или уже есть? Или ждешь пока я чет сделаю что б потом крякнуть?))
 
Или ждешь пока я чет сделаю что б потом крякнуть?))
я даже UPX распаковать не смогу, а ты тут про кряк :roflanEbalo:
Давай это, пили свой софт
У меня пока руки не доходят его доделать, а как доделаю сделаю его опен сурс.
 
я даже UPX распаковать не смогу, а ты тут про кряк :roflanEbalo:

У меня пока руки не доходят его доделать, а как доделаю сделаю его опен сурс.
все равно ничего не понял. Зачем нужен апдейт клиент сайд анимейшен? va_angles. Это что?
 
все равно ничего не понял. Зачем нужен апдейт клиент сайд анимейшен? va_angles. Это что?
Обновляем анимации и предугадываем апдейт лбу по вычислениям как это делает сервер( напомню, что лбу обновляется в SetUpVelocity ), va_angles = CPlayerState::v_angle (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), ставить их надо потому что эти углы будут передаваться в CCSGOPlayerAnimState::Update, и они будут использоваться системой анимации
Код:
Expand Collapse Copy
 NETVAR_EX( QAngle, va_angles, "DT_BasePlayer", "deadflag", 0x04 );
 
Обновляем анимации и предугадываем апдейт лбу по вычислениям как это делает сервер( напомню, что лбу обновляется в SetUpVelocity ), va_angles = CPlayerState::v_angle (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), ставить их надо потому что эти углы будут передаваться в CCSGOPlayerAnimState::Update, и они будут использоваться системой анимации
Код:
Expand Collapse Copy
 NETVAR_EX( QAngle, va_angles, "DT_BasePlayer", "deadflag", 0x04 );
Код:
Expand Collapse Copy
bool antiaim::anim_lby_update()
{
    g_ctx.m_local->va_angles().yaw = g_ctx.get_command()->m_viewangles.y;
    g_ctx.m_local->update_clientside_animation();

    c_baseplayeranimationstate* animstate = g_ctx.m_local->get_animation_state();

    float servertime = g_ctx.m_local->m_nTickBase() * g_csgo.m_globals()->m_interval_per_tick;
    static float flNextLBYUpdate = servertime;

    if (animstate->m_velocity > 0.1f /*|| abs(animstate->m_up_speed) > 100.0f */)
        flNextLBYUpdate = servertime + 0.22;
    /*else if (std::abs(math::normalize_yaw(g_ctx.get_command()->m_viewangles.y - animstate->m_flGoalFeetYaw)) > 35.0f // не выкупаю нафиг надо?)
        flNextLBYUpdate = servertime + 1.1;*/

    if (servertime > flNextLBYUpdate)
    {
        flNextLBYUpdate = servertime + 1.125;
        return true;
    }

    return false;
}

Правильно?
 
Хочу отметить, что это не только лбу брейкер, но и синхронизация анимации локального игрока с сервером, поэтому
g_ctx.m_local->va_angles().yaw = g_ctx.get_command()->m_viewangles.y;
ставить надо не только yaw, но и pitch, так что просто
Код:
Expand Collapse Copy
 g_ctx.m_local->va_angles() =  g_ctx.get_command()->m_viewangles;
не выкупаю нафиг надо?)
действительно, зачем делать так же как сервер это делает сервер
flNextLBYUpdate = servertime + 1.125;
1.1

ща сделаю реверс апдейта лбу на сервере
 
Пожалуйста, авторизуйтесь для просмотра ссылки.

120 строка, вот так это выглядит на сервере
Код:
Expand Collapse Copy
float flLowerBody = pBaseEntity->GetLowerBodyYaw();
if (m_flSpeed > 0.1f || fabs(m_flAbsVelocityZ) > 100.0f)
{
    m_flGoalFeetYaw = ApproachAngle(
        m_flEyeYaw,
        m_flGoalFeetYaw,
        ((m_flGroundFraction * 20.0f) + 30.0f)
        * m_flLastClientSideAnimationUpdateTimeDelta);
        
    m_flLowerBodyUpdateTime = gpGlobals->curtime + 0.22f;
    if( flLowerBody != m_flEyeYaw ) {
        pBaseEntity->GetLowerBodyYaw() = m_flEyeYaw;
    }
}
else
{
    m_flGoalFeetYaw = ApproachAngle(
        pBaseEntity->GetLowerBodyYaw(),
        m_flGoalFeetYaw,
        m_flLastClientSideAnimationUpdateTimeDelta * 100.0f);
        
    if( gpGlobals->curtime > m_flLowerBodyUpdateTime ) {
        //https://github.com/ValveSoftware/source-sdk-2013/blob/master/sp/src/mathlib/mathlib_base.cpp#L3466
        float delta = AngleDiff(m_flGoalFeetYaw, pBaseEntity->GetLowerBodyYaw());
        if(abs(delta) > 35.0f){
            m_flLowerBodyUpdateTime = gpGlobals->curtime + 1.1f;
            pBaseEntity->GetLowerBodyYaw() = m_flEyeYaw;
        }
    }
}

Псевдокод:
Код:
Expand Collapse Copy
  velocity = v3->m_velocity;
  v3->m_flGoalFeetYaw = GoalFeetYaw;
  if ( velocity > 0.1 || COERCE_FLOAT(LODWORD(v3->flUpVelocity) & abs_mask) > 100.0 )
  {
    // ApproachAngles inlined
    v63 = (float)((float)(v3->m_flGroundFriction * 20.0) + 30.0) * v3->m_flFrametime;
    v64 = (float)(unsigned __int16)(signed int)(float)(GoalFeetYaw * 182.04445) * 0.0054931641;
    v65 = (float)((float)(unsigned __int16)(signed int)(float)(v3->m_flEyeYaw * 182.04445) * 0.0054931641) - v64;
    if ( v63 < 0.0 )
      LODWORD(v63) ^= negative_mask;
    if ( v65 >= -180.0 )
    {
      if ( v65 > 180.0 )
        v65 = v65 - 360.0;
    }
    else
    {
      v65 = v65 + 360.0;
    }
    if ( v65 <= v63 )
    {
      if ( COERCE_FLOAT(LODWORD(v63) ^ negative_mask) <= v65 )
        v66 = (float)(unsigned __int16)(signed int)(float)(v3->m_flEyeYaw * 182.04445) * 0.0054931641;
      else
        v66 = v64 - v63;
    }
    else
    {
      v66 = v64 + v63;
    }
    v67 = dword_109CFDC0;
    v68 = (char *)v3->m_player;
    v3->m_flGoalFeetYaw = v66;
    LowerBodyYaw = (float *)(v68 + 10140);
    v153 = LowerBodyYaw;
    v3->m_flLowerBodyUpdateTime = *(float *)(v67 + 16) + 0.22000001;
    if ( *(_DWORD *)LowerBodyYaw != LODWORD(v3->m_flEyeYaw) )
    {
      v70 = (int)(LowerBodyYaw + 0xFFFFF619);
      if ( *((_BYTE *)LowerBodyYaw + 0xFFFFD8BC) )
      {
        *(_BYTE *)(v70 + 92) |= 1u;
      }
      else if ( *(_DWORD *)(v70 + 28) )
      {
        v71 = (signed __int16)LowerBodyYaw;
        v72 = *(_DWORD *)(v70 + 28);
        SendNetvarFloat(v71 - v70);
        LowerBodyYaw = v153;
      }
      *LowerBodyYaw = v3->m_flEyeYaw;
    }
  }
  else
  {
    LowerBodyYawPointer = (float *)((char *)v3->m_player + 10140);
    goalFeetYaw = ApproachAngles(*LowerBodyYawPointer, GoalFeetYaw, v3->m_flFrametime * 100.0);
    v58 = dword_109CFDC0;
    LODWORD(v3->m_flGoalFeetYaw) = goalFeetYaw.m128_i32[0];
    feetYaw = goalFeetYaw.m128_f32[0];
    if ( *(float *)(v58 + 16) > v3->m_flLowerBodyUpdateTime )
    {
      v152 = fmod((float)(goalFeetYaw.m128_f32[0] - v3->m_flEyeYaw), 360.0);
      eyeAbsDelta = v152;
      if ( feetYaw <= v3->m_flEyeYaw )          // NormalizeAngles
      {
        if ( v152 <= -180.0 )
          eyeAbsDelta = v152 + 360.0;
      }
      else if ( v152 >= 180.0 )
      {
        eyeAbsDelta = v152 - 360.0;
      }
      if ( COERCE_FLOAT(LODWORD(eyeAbsDelta) & abs_mask) > 35.0 )
      {
        LBY = LowerBodyYawPointer;
        v3->m_flLowerBodyUpdateTime = *(float *)(v58 + 16) + 1.1;
        if ( *(_DWORD *)LowerBodyYawPointer != LODWORD(v3->m_flEyeYaw) )
        {
          v61 = (int)(LowerBodyYawPointer - 2535);
          if ( *((_BYTE *)LowerBodyYawPointer - 10052) )
          {
            *(_BYTE *)(v61 + 92) |= 1u;
            *LowerBodyYawPointer = v3->m_flEyeYaw;
          }
          else
          {
            if ( *(_DWORD *)(v61 + 28) )
            {
              v62 = *(_DWORD *)(v61 + 28);
              SendNetvarFloat(10140);
              LBY = LowerBodyYawPointer;
            }
            *LBY = v3->m_flEyeYaw;
          }
        }
      }
    }
  }
 
Назад
Сверху Снизу