Статья Основные функции чита. Гайд для пастеров

cf19

Исследователь
Сообщения
25
Реакции
1
Кейбинды.

Все кейбинды системы делаются оч просто, создаёте переменную. Добавляете ей пару типов, ставите для неё кнопку и создаёте бул актив.
А потом делаете проверку на активный тип и поехали:

C++:
struct KeyBindik
{
Int key;
Int mode;
Bool active;
}

Inline KeyBindik g_Keys[max];

for (int I = 0; I < max_keys; I++)
{
auto bind = g_Binds[i];

Switch (bind.mode)

    case force_on:

            bind.active = true; break;

    case toggle:

             bind.active = GetKeyState(bind.key); break;

    case hold_on:

            bind.active = GetAsyncKeyState(bind.key); break;

    case hold_off:

             bind.active = !GetAsyncKeyState(bind.key); break;

    case force_off:

             bind.active = false; break;

}


Ресольвер.

Ресольвер - простыми словами это нахождение реального угла противника( не положения головы, нет)
Стоит сказать, что хороший ресольвер без правильных анимаций и хорошего лагкомп не сделать. Он конечно будет работать, но не идеально.
Для начала стоит узнать какие способы определения стороны десинк имеются:
Первый и самый известный - анимации. Для большинства выражение “ресольвер по анимациям» означает анимлееры, да, они принимают в нём участие, и являются главной частью.
Большая часть аним ресольвера начинаются с поиском дельт
Левая, центральна, правая, и лоу
Дельта находится так:
Abs(для получения положительного значения)

C++:
(record->layers[center][6].playback_rate - record->layers[left or right][6].playback_rate) 6

- это мув леер, отвечает за мувы (что логично)
Вантуз в2-в3 сравнивал их при помощи крутых вычислений, а крутые кодеры по типу порча, делают иначе, сравнивая их, и занося большую в статичную переменную.
Как я уже сказал раньше нам нужен хороший анимфикс, а для чего? А чтобы иметь для каждой матрицы, свои лееры


Второй метод - антифристенд, он же трейсы , суть проста, повернуть противника ближе к стене , т.к. большинство поворачивают голову к стене. По сути это не детект, а лишь имитация его, т.к. мы не сравниваем данные противника, а просто стараемся его повернуть, стоит ли говорить что джиттеры таким методом не зафиксишь, только лаки, этот метод можно использовать как дополнительный, если основной детект выдаёт 0, или на стенды




Теперь расскажу про десинк дельту

Самый лучший способ найти максимально правильную, setupvelocity, а именно значения MaxBodyYaw и MinBodyYaw, они ограничены от -58 до 58 и больше быть не могут
Оки доки, у вас есть десинк дельта, нужный сайт, что же делать дальше? ПОДСТАВЛЯТЬ!!
Самый простой способ это юзать switch
На первый кейс вы ставите
animstate->goal_feet_yaw = record-> abs_yaw - desync_delta * side;
На второй, вы своё значение умножаете на -1, а дальше(2, 3, 4 и тд) начинаете брутить, сначала миняв, потом максяв, потом 30 градусов, потом -30 градусов, можете свои углы придумать, но это не обязательно
Профит!


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

Коротко о работе лагкомп, собираем рекорды противника, проверяем, обновляем анимации для каждого рекорда, и сейвим.
Что такое рекорд? Рекорд это запись игрока(ахуеть да?), запись большинства его переменных, позиция, углы, флаги, мины и максы, симтаймы матрицы и тд.
Базовый лагкомп.
Находим игрока, проверяем что он нам подходит(он живой, является противником), проверяем что он не юзает эксплойты, сохраняем рекорд, апдейтим анимки, и если кол-во рекордов больше 32, удаляем последний. По сути всё, не буду углубляться в мелочи, ссылку на

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



Анимфикс, да да , он самый, так как мне нечего делать, распишу суть его работы:

Он нужен для синхронизации анимаций на сервере и клиенте, рассинхрон происходит из-за того, что на сервере анимации обновляются каждый тик, а на клиенте каждый кадр.
Для синхронизации нам нужно остановить игру от обновлений, и в момент прихода к нам анимаций, обновить аналогично серверу.

Простейшая версия анимфикса:

  • Для начала мы должны засторить все наши глобальные переменные(curtime, realtime, frametime, frame count, absframecount и interp_amount)
  • Все таймы мы приравниваем к симтайму энеми, а каунты к интервалу, интерп эмаунт ставим на нуль.
  • Форсим флаг 0x1000
  • Приравниваем абс велосити к обычному велосити
  • Обновляем клиенсайд анимации
  • Сетапим матрицу
  • Ресторим глобалсы

Всё! Базовый анимфикс готов, но для того чтобы сделать его чуть лучше, нужно добавить велоситификс, сейчас мне его лень расписывать, но позже я обязательно это сделаю)


Думал я тут значит насчёт дефенсива и подобных ему эксплойтах, что я знаю:

Дефенсив по сути те же фейклаги, но вместо чока, они шифтят тикбазу, а какие фейклаги труднее всего предиктить? Правильно, на пик, а почему? Да потому что при пике большинство читов ставят более большой чок, 15-16 тиков, за счёт этого лагкомпенсация ломается более сильно, и если в чите нет проверки на брик лк, то чит либо мисает, либо не стреляет вовсе.
Как я себе вижу примерный код:

C++:
//Делаем таймер, который будет шифтить раз в какое-то кол-во тиков, буду брать их из фейклагов
static int m_iTickDelay = o;
if (++m_iTickDelay >= g_Setting.FakelagFactor)
g_Exploits->SetShiftCount(bIsPeeking ? 16 : 14);
// Да я понимаю что шифт 16-ти тиков повлияет на стабильность дт и скорее всего зашифчено будет меньше, но оно может сломать лагкомпенсацию

m_iTickDelay = 0;
// Обнуляем делей после шифта

Теперь брик лц. Это похожий эксплоит, работает по тому же сценарию, но только без таймера и без проверки на пик, при использовании с фейклагами достаточно шифтить 1-2 тика, без фейклагов 10-14, в зависимости от того, какие флаги у вас стоят по дефу (1 или 2)


Теперь подумаем насчёт ресольвера, в частности запоминания угла, я себе представляю это так:

C++:
// Мы создаём переменную, которая будет хранить последний заресольвленный угол
static float m_flLastResolvedAngle[64];
if (m_flLastResolvedAngle[index] == 0)
m_flLastResolvedAngle[index] = -1.f;
// Определяем угол, чтобы не было крашей случайных, сделать надо через цикл for

case 0:
//  У нас пока не было мисов, и если ласт угол не равен -1 то мы ставим его, в ином случае мы ставим найденый он угол, а ласт угол определяем



Оптимизация, это вообще отдельная тема, делается ту мач сложно, начиная ограничениями вычислений, заканчивая созданием мультитрединга, и вынесением функций в потоки:

Самая простая оптимизация, это:

  • Ограничение игроков для скана до 2-х
  • Фиксация значений ресольвера хотя бы на пару тиков
  • Оптимизация сигнатур, использования типа static везде где это приемлемо
  • Удаление ненужного кода, комментариев, бесполезных вычислений и сравниваний
  • Вместо постоянного поиска названия и директорий в чамсах и тд, использование статичных индексов и тд.

Более хорошая оптимизация:

  • Рефакторинг кода
  • Поиск жрущих фпс частей кода
  • Чистка хуков
  • Разбивка кода по функция, дабы не переполнять буфер
  • Редкое использование сетапбонса

Наилучшая оптимизация:

  • Использование мультридинга
  • Профилировщиком найти всё что сильно нагружает ЦП
  • Статичные хуки
 
Верх Низ