Исходник Brushes Color Modulating

Модератор раздела «Создание читов CS2»
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2022
Сообщения
148
Реакции[?]
367
Поинты[?]
156K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
До:
Screenshot_3.png
После:

hooks.cc:
// Байты для патча с jz на jmp
constexpr std::array< std::uint8_t, 4 > patch_bytes{ 0xE9, 0x2F, 0x01, 0x00 };
// module: client.dll; sig: 0F 84 2E 01 00 00 8D 04 7F
static const auto sig = g_modules->client( ).get_address( _( "BrushCheck" ) ).as< std::uintptr_t* >( );

DWORD old_protect;
VirtualProtect( sig, 4, PAGE_EXECUTE_READWRITE, &old_protect );
std::memcpy( sig, patch_bytes.data( ), 4 );
VirtualProtect( sig, 4, old_protect, &old_protect );
 
..................................................
Участник
Статус
Оффлайн
Регистрация
13 Авг 2020
Сообщения
990
Реакции[?]
249
Поинты[?]
20K
а чо делает то? пропы некоторые только закрашивает?
 
Модератор раздела «Создание читов CS2»
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2022
Сообщения
148
Реакции[?]
367
Поинты[?]
156K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а чо делает то? пропы некоторые только закрашивает?
Когда люди используют хук GetColorModulation для окраски мира, они обычно проверяют несколько типов текстур: «World textures», «StaticProp textures», «SkyBox textures». Из названий этих групп текстур можно сделать вывод, что они окрашивают только определенные участки карты. Однако можно заметить, что не все объекты на карте окрашиваются, например — используя проверку на «World textures», не крассятся коробки на мираже (см. скриншот в теме) или вот эта доска (на карте много таких объектов и они называются брашами):


Исследуя код игры, я заметил очень интересные строчки кода отвечающее за эти браши.
За их отрисовку отвечает функция
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Смотрим первую проверку на конвар, тестим ее непосредственно в игре, чтобы проверить на правильном пути ли мы.
1679509517394.png
Вводим кон. команду «r_drawbrushmodels 0» в консоль игры и проверяем результат.
Видим, что это то, что нужно.
1679509607626.png
Возвращаемся обратно к нашей функции и видим далее подобный код:
1679509778621.png
Данный участок кода проходится по всем брашам на карте и собирает информацию о каждом, далее, используя это информацию, вызывает функцию DrawBrushModels в которой, в свою очередь, идет установка цвета (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) и добавление определенного браша в список для дальнейшей отрисовки (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).

Следовательно, можно понять, что мы можем пропатчить чек на комманду «cl_brushfastpath», дабы не воспроизводился код, описанный выше, и вызывалась только легенькая функция
Пожалуйста, авторизуйтесь для просмотра ссылки.
. На самом деле, есть много реализаций, но эта одна из простейших (о другой реализации я написал в хайде).

Кто не понял как работает патч, то вот скрин, который должен вам помочь в понимании:


Результат после патча можно увидеть в теме. P.s использовался обычный nightmode (хук GetColorModulation и покраска текстур с именем группы «World textures»), о котором я писал в самом начале этого сообщения, т.е каких-то отдельных хуков для покраски брашей не нужны.
Так же забыл подметить, что цвет будет чуть чуть темнее, чем тот, который вы установили. В теории, это можно исправить, не передавая флаги в функцию DrawRenderable.

 
Сверху Снизу