• Страница 1 из 1
  • 1
Форум » Общий раздел » Разработка читов » Уроки » [CS:GO][C++] пишем простейший ресольвер (простейший ресольвер на C++ как и что?, здесь ответ!)
[CS:GO][C++] пишем простейший ресольвер
zynvek Дата: Четверг, 30.08.2018, 17:42 | Сообщение # 1
Сообщений: 21
Статус:
Прочитав эту короткую статью, сам станет легче написать свой ресольвер.
 
Сначала вводим цикл while
Код
while (Cvar.RageEnabled && Cvar.RageResolver)
{
                         
}


Далее объявляем основные переменные
Доступно только для пользователей

Теперь нужно сделать так, чтобы для каждого игрока отдельно сохранялась информация ресольвера. Используем цикл for
Код
if (stage == FRAME_NET_UPDATE_POSTDATAUPDATE_START)
        {
            //Resolver1337
            while (Cvar.RageEnabled && Cvar.RageResolver)
            {
                static float LBY[65];
                static float OldLBY[65];
                static float Delta[65];
                static float OldDelta[65];
 
                for (int ID = 0; ID < I::ClientEntList->GetHighestEntityIndex(); ID++)
                {
                    CBaseEntity* Player = I::ClientEntList->GetClientEntity(ID);
 
                    if (!Player || Player == G::LocalPlayer || !Player->GetAlive() || Player->GetDormant() || (!Player->GetClientClass() || Player->GetClientClass()->m_ClassID != 35) || (Player->GetTeam() == G::LocalPlayer->GetTeam() && !Cvar.RageFriendly))
                        continue;
            }


Далее всё будет в самом цикле for.
 
Код
auto *Yaw = reinterpret_cast<float*>(reinterpret_cast<DWORD>(Player) + offsets.m_angEyeAnglesY);
                    auto Speed = Player->GetVelocity().Length();


Теперь у нас есть yaw и скорость движения игроков.
 
Грубо говоря, есть 4 случая поведения модельки игрока.
 
Для начала зафиксируем тот случай, в котором нарушен Lower Body Yaw (LBY).
Код
if (LBY [ID]!= Player->GetLBY())
                    {
                        *Yaw = Player->GetLBY();
                        OldDelta [ID]= Delta[ID];
                        Delta [ID]= (Player->GetLBY() - LBY[ID]);
                        OldLBY [ID]= LBY[ID];
                        LBY [ID]= Player->GetLBY();
                    }


Теперь в оперативной памяти хранятся значения нового и старого LBY и новой и старой дельты (делта - это угол флика LBY антиаима).
 
Дальше рассмотрим случай, когда игрок находится в движении.
Здесь всё просто
Код
else if (Speed > 0.1f && Player->GetFlags() & FL_ONGROUND)
                    {
                        *Yaw = Player->GetLBY();
                    }


И следующий случай - ломают анимацию. Если дельта меньше 35, сервер обновляет анимацию, значит здесь дельта больше 35.
else if (fabsf(Delta[ID]) > 35.f)
                   
На этом этапе нужно сравнить старую дельту с новой.
 
Логическое завершение таково
Доступно только для пользователей

Да. Придётся брутфорсить, если дельты не равны. Но, исходя из предпочтений людей по антиаимам, можно переделать
*Yaw = Player->GetLBY() + (Delta [ID]+ RandomFloat(MinDelta, MaxDelta));
на
*Yaw = Player->GetLBY() + (Delta [ID]+ RandomFloat(110, 120));
Это был простейший ресольвер, который сможет фиксить любые простые антиаимы. Дальше всё зависит от вашей фантазии.
 
Headshoot Дата: Пятница, 31.08.2018, 00:10 | Сообщение # 2
Сообщений: 67
Статус:
найс  love
 
zynvek Дата: Пятница, 31.08.2018, 19:57 | Сообщение # 3
Сообщений: 21
Статус:
ага я пока это писал у меня рука заболела (
 
Форум » Общий раздел » Разработка читов » Уроки » [CS:GO][C++] пишем простейший ресольвер (простейший ресольвер на C++ как и что?, здесь ответ!)
  • Страница 1 из 1
  • 1
Поиск: