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

Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
C++:
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;
}
Юзал этот брикер ещё со времен древнего и еб**го заманвара. Работал как часы, без проблем.

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

Что мне нужно здесь исправить, чтобы получить идеальный брикер? Что б прям встал в стенд позу и почти сразу же брикало угол правильно. Спасайте, поцаны, ибо джиттера маловато
 
int main(int nNumberofArgs, char pszArgs[])
Забаненный
Статус
Оффлайн
Регистрация
23 Мар 2018
Сообщения
759
Реакции[?]
173
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
юзаю такой брикер, в моем стакане он заебись работает
Код:
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;
    }
}
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
юзаю такой брикер, в моем стакане он заебись работает
Код:
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;
    }
}
спасибо, я попробую
 
ROAD TO THE LEGEND
Забаненный
Статус
Оффлайн
Регистрация
7 Фев 2018
Сообщения
2,194
Реакции[?]
714
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
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;
}
Юзал этот брикер ещё со времен древнего и еб**го заманвара. Работал как часы, без проблем.

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

Что мне нужно здесь исправить, чтобы получить идеальный брикер? Что б прям встал в стенд позу и почти сразу же брикало угол правильно. Спасайте, поцаны, ибо джиттера маловато
Кинь где ты его вызываешь
 
ROAD TO THE LEGEND
Забаненный
Статус
Оффлайн
Регистрация
7 Фев 2018
Сообщения
2,194
Реакции[?]
714
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
int main(int nNumberofArgs, char pszArgs[])
Забаненный
Статус
Оффлайн
Регистрация
23 Мар 2018
Сообщения
759
Реакции[?]
173
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
int main(int nNumberofArgs, char pszArgs[])
Забаненный
Статус
Оффлайн
Регистрация
23 Мар 2018
Сообщения
759
Реакции[?]
173
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
хм, я больше 0.7 не ставил xDD
если у тебя все идеально работает и твои индикаторы лбу показывают именно то, что нужно, совпадает с углом который под который ты брикаешь, то не вижу смысла играться. Пускай будет так как оно есть)
 
int main(int nNumberofArgs, char pszArgs[])
Забаненный
Статус
Оффлайн
Регистрация
23 Мар 2018
Сообщения
759
Реакции[?]
173
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
если у тебя все идеально работает и твои индикаторы лбу показывают именно то, что нужно, совпадает с углом который под который ты брикаешь, то не вижу смысла играться. Пускай будет так как оно есть)
0.1 - 0.7 оптимальные варианты, т.к если ставить больше - лбу будет ломаться(либо не будет разницы между меньшим и большим значением, вообщем, ты понял). 0.1 - идеальное значение, которое более менее подошло.
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

Код:
// не забываем про 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;
 
Забаненный
Статус
Оффлайн
Регистрация
19 Фев 2018
Сообщения
647
Реакции[?]
167
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а зачем те брикер? что бы, что?
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

Код:
// не забываем про 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;
Спасибо. Нужно попробовать.
Давай это, пили свой софт. Или уже есть? Или ждешь пока я чет сделаю что б потом крякнуть?))
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
Или ждешь пока я чет сделаю что б потом крякнуть?))
я даже UPX распаковать не смогу, а ты тут про кряк :roflanEbalo:
Давай это, пили свой софт
У меня пока руки не доходят его доделать, а как доделаю сделаю его опен сурс.
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
я даже UPX распаковать не смогу, а ты тут про кряк :roflanEbalo:

У меня пока руки не доходят его доделать, а как доделаю сделаю его опен сурс.
все равно ничего не понял. Зачем нужен апдейт клиент сайд анимейшен? va_angles. Это что?
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
все равно ничего не понял. Зачем нужен апдейт клиент сайд анимейшен? va_angles. Это что?
Обновляем анимации и предугадываем апдейт лбу по вычислениям как это делает сервер( напомню, что лбу обновляется в SetUpVelocity ), va_angles = CPlayerState::v_angle (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), ставить их надо потому что эти углы будут передаваться в CCSGOPlayerAnimState::Update, и они будут использоваться системой анимации
Код:
 NETVAR_EX( QAngle, va_angles, "DT_BasePlayer", "deadflag", 0x04 );
 
Эксперт
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
864
Реакции[?]
420
Поинты[?]
1K
Обновляем анимации и предугадываем апдейт лбу по вычислениям как это делает сервер( напомню, что лбу обновляется в SetUpVelocity ), va_angles = CPlayerState::v_angle (
Пожалуйста, авторизуйтесь для просмотра ссылки.
), ставить их надо потому что эти углы будут передаваться в CCSGOPlayerAnimState::Update, и они будут использоваться системой анимации
Код:
 NETVAR_EX( QAngle, va_angles, "DT_BasePlayer", "deadflag", 0x04 );
Код:
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;
}
Правильно?
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
Хочу отметить, что это не только лбу брейкер, но и синхронизация анимации локального игрока с сервером, поэтому
g_ctx.m_local->va_angles().yaw = g_ctx.get_command()->m_viewangles.y;
ставить надо не только yaw, но и pitch, так что просто
Код:
 g_ctx.m_local->va_angles() =  g_ctx.get_command()->m_viewangles;
не выкупаю нафиг надо?)
действительно, зачем делать так же как сервер это делает сервер
flNextLBYUpdate = servertime + 1.125;
1.1

ща сделаю реверс апдейта лбу на сервере
 
НАЧНИ ПРОГРАММИРОВАТЬ ПРЯМО СЕЙЧАС
Участник
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
608
Реакции[?]
924
Поинты[?]
4K
Пожалуйста, авторизуйтесь для просмотра ссылки.

120 строка, вот так это выглядит на сервере
Код:
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;
        }
    }
}
Псевдокод:
Код:
  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;
          }
        }
      }
    }
  }
 
Сверху Снизу