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
Статус:
|
найс |
|
|
|
zynvek
|
Дата: Пятница, 31.08.2018, 19:57 | Сообщение # 3
|
Сообщений: 21
Статус:
|
ага я пока это писал у меня рука заболела ( |
|
|
|