Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Internal Glow Cs2

Начинающий
Начинающий
Статус
Онлайн
Регистрация
29 Авг 2025
Сообщения
112
Реакции
10
Гайд на Internal Glow.
для реализации glow обводки нам понадобится:
структура c_glow_property:
class c_glow_property
{
public:
char pad[0x18];
c_entity_instance* m_owner;
};
///////////////////////
minhook в вашем проекте.
актуальные паттерны для is_glow(E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F client.dll) и glow_color(48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24 client.dll).

Создаем typedef:
using hk_is_glow = bool(__fastcall*)(c_glow_property*);
hk_is_glow fn_is_glow = nullptr;
using hk_glow_color = void(__fastcall*)(c_glow_property*, c_color);
hk_glow_color fn_glow_color = nullptr;

Создаем сам хук:
auto hooks::is_glow(c_glow_property* glow_property) -> bool // этот хук будет применять glow на игроков, но тут мы не можем менять цвет(для смены цвета у нас будет хук glow_color)
{
auto original = is_glow_hook.get_original<decltype(&is_glow)>();

if (!glow_property)
return false;

auto local_pawn = g_globals->local_player_pawn;
if (!local_pawn) return false;

if (!glow_property->m_owner)
return false;

auto pawn = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!pawn || pawn->m_health() <= 0) // если убрать pawn->m_health() <= 0 то у вас будет glow накладываться на мертвых игроков
return false;

if (g_globals->local_player_pawn->m_team_num() == pawn->m_team_num()) return false; // это проверка на команду, что бы не накладывать glow на тиммейтов(можно убрать)

if (!pawn->is_player_pawn()) return false; // накладывает glow только на игроков


return true; // если все проверки прошли glow возвращает true и накладывает glow
}

хук glow_color:
auto hooks::glow_color(c_glow_property* glow_property, c_color color) -> void // c_color - это r, g, b, a (1.f, 1.f, 1.f, 1.f)
{
static auto original = glow_color_hook.get_original<decltype(&glow_color)>(); // получаем оригинал
if (!glow_property)
return original(glow_property, color);


if (!g_globals->local_player_pawn)
return original(glow_property, color);

auto owner = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!owner || owner == g_globals->local_player_pawn) // если owner == g_globals->local_player_pawn тогда пропускаем локального игрока
return original(glow_property, color);


if (owner->m_health() <= 0) // проверка на здоровье
return original(glow_property, color);



if (g_globals->local_player_pawn->m_team_num() == owner->m_team_num()) // так же пропускаем локальную команду
return original(glow_property, color);



color.r = g_cfg->visuals.m_glow_color.r; // тут мы применяем цвет для glow
color.g = g_cfg->visuals.m_glow_color.g;
color.b = g_cfg->visuals.m_glow_color.b;
color.a = g_cfg->visuals.m_glow_color.a;
}
void initialize_glow_hook(){
MH_Initialize();

auto is_glow_addr = utils::absolute(utils::pattern_scan("client.dll","E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F"), 0x1);

auto glow_color_addr = utils::pattern_scan("client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24");

MH_CreateHook(reinterpret_cast<void*>(is_glow_addr),&hooks::is_glow,reinterpret_cast<void**>(&fn_is_glow));

MH_CreateHook(reinterpret_cast<void*>(glow_color_addr),&hooks::glow_color ,reinterpret_cast<void**>(&fn_glow_color));

MH_EnableHook(reinterpret_cast<void*>(is_glow_addr));
MH_EnableHook(reinterpret_cast<void*>(glow_color_addr));
}
далее просто вызываем initialize_glow_hook в dll main
1778503629052.png
 
Гайд на Internal Glow.
для реализации glow обводки нам понадобится:
структура c_glow_property:
class c_glow_property
{
public:
char pad[0x18];
c_entity_instance* m_owner;
};
///////////////////////
minhook в вашем проекте.
актуальные паттерны для is_glow(E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F client.dll) и glow_color(48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24 client.dll).

Создаем typedef:
using hk_is_glow = bool(__fastcall*)(c_glow_property*);
hk_is_glow fn_is_glow = nullptr;
using hk_glow_color = void(__fastcall*)(c_glow_property*, c_color);
hk_glow_color fn_glow_color = nullptr;

Создаем сам хук:
auto hooks::is_glow(c_glow_property* glow_property) -> bool // этот хук будет применять glow на игроков, но тут мы не можем менять цвет(для смены цвета у нас будет хук glow_color)
{
auto original = is_glow_hook.get_original<decltype(&is_glow)>();

if (!glow_property)
return false;

auto local_pawn = g_globals->local_player_pawn;
if (!local_pawn) return false;

if (!glow_property->m_owner)
return false;

auto pawn = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!pawn || pawn->m_health() <= 0) // если убрать pawn->m_health() <= 0 то у вас будет glow накладываться на мертвых игроков
return false;

if (g_globals->local_player_pawn->m_team_num() == pawn->m_team_num()) return false; // это проверка на команду, что бы не накладывать glow на тиммейтов(можно убрать)

if (!pawn->is_player_pawn()) return false; // накладывает glow только на игроков


return true; // если все проверки прошли glow возвращает true и накладывает glow
}

хук glow_color:
auto hooks::glow_color(c_glow_property* glow_property, c_color color) -> void // c_color - это r, g, b, a (1.f, 1.f, 1.f, 1.f)
{
static auto original = glow_color_hook.get_original<decltype(&glow_color)>(); // получаем оригинал
if (!glow_property)
return original(glow_property, color);


if (!g_globals->local_player_pawn)
return original(glow_property, color);

auto owner = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!owner || owner == g_globals->local_player_pawn) // если owner == g_globals->local_player_pawn тогда пропускаем локального игрока
return original(glow_property, color);


if (owner->m_health() <= 0) // проверка на здоровье
return original(glow_property, color);



if (g_globals->local_player_pawn->m_team_num() == owner->m_team_num()) // так же пропускаем локальную команду
return original(glow_property, color);



color.r = g_cfg->visuals.m_glow_color.r; // тут мы применяем цвет для glow
color.g = g_cfg->visuals.m_glow_color.g;
color.b = g_cfg->visuals.m_glow_color.b;
color.a = g_cfg->visuals.m_glow_color.a;
}
void initialize_glow_hook(){
MH_Initialize();

auto is_glow_addr = utils::absolute(utils::pattern_scan("client.dll","E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F"), 0x1);

auto glow_color_addr = utils::pattern_scan("client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24");

MH_CreateHook(reinterpret_cast<void*>(is_glow_addr),&hooks::is_glow,reinterpret_cast<void**>(&fn_is_glow));

MH_CreateHook(reinterpret_cast<void*>(glow_color_addr),&hooks::glow_color ,reinterpret_cast<void**>(&fn_glow_color));

MH_EnableHook(reinterpret_cast<void*>(is_glow_addr));
MH_EnableHook(reinterpret_cast<void*>(glow_color_addr));
}
далее просто вызываем initialize_glow_hook в dll main
давай чамсы умоляю
 
Гайд на Internal Glow.
для реализации glow обводки нам понадобится:
структура c_glow_property:
class c_glow_property
{
public:
char pad[0x18];
c_entity_instance* m_owner;
};
///////////////////////
minhook в вашем проекте.
актуальные паттерны для is_glow(E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F client.dll) и glow_color(48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24 client.dll).

Создаем typedef:
using hk_is_glow = bool(__fastcall*)(c_glow_property*);
hk_is_glow fn_is_glow = nullptr;
using hk_glow_color = void(__fastcall*)(c_glow_property*, c_color);
hk_glow_color fn_glow_color = nullptr;

Создаем сам хук:
auto hooks::is_glow(c_glow_property* glow_property) -> bool // этот хук будет применять glow на игроков, но тут мы не можем менять цвет(для смены цвета у нас будет хук glow_color)
{
auto original = is_glow_hook.get_original<decltype(&is_glow)>();

if (!glow_property)
return false;

auto local_pawn = g_globals->local_player_pawn;
if (!local_pawn) return false;

if (!glow_property->m_owner)
return false;

auto pawn = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!pawn || pawn->m_health() <= 0) // если убрать pawn->m_health() <= 0 то у вас будет glow накладываться на мертвых игроков
return false;

if (g_globals->local_player_pawn->m_team_num() == pawn->m_team_num()) return false; // это проверка на команду, что бы не накладывать glow на тиммейтов(можно убрать)

if (!pawn->is_player_pawn()) return false; // накладывает glow только на игроков


return true; // если все проверки прошли glow возвращает true и накладывает glow
}

хук glow_color:
auto hooks::glow_color(c_glow_property* glow_property, c_color color) -> void // c_color - это r, g, b, a (1.f, 1.f, 1.f, 1.f)
{
static auto original = glow_color_hook.get_original<decltype(&glow_color)>(); // получаем оригинал
if (!glow_property)
return original(glow_property, color);


if (!g_globals->local_player_pawn)
return original(glow_property, color);

auto owner = reinterpret_cast<c_cs_player_pawn*>(glow_property->m_owner);
if (!owner || owner == g_globals->local_player_pawn) // если owner == g_globals->local_player_pawn тогда пропускаем локального игрока
return original(glow_property, color);


if (owner->m_health() <= 0) // проверка на здоровье
return original(glow_property, color);



if (g_globals->local_player_pawn->m_team_num() == owner->m_team_num()) // так же пропускаем локальную команду
return original(glow_property, color);



color.r = g_cfg->visuals.m_glow_color.r; // тут мы применяем цвет для glow
color.g = g_cfg->visuals.m_glow_color.g;
color.b = g_cfg->visuals.m_glow_color.b;
color.a = g_cfg->visuals.m_glow_color.a;
}
void initialize_glow_hook(){
MH_Initialize();

auto is_glow_addr = utils::absolute(utils::pattern_scan("client.dll","E8 ? ? ? ? 33 DB 84 C0 0F 84 ? ? ? ? 48 8B 4F"), 0x1);

auto glow_color_addr = utils::pattern_scan("client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B F2 48 8B F9 48 8B 54 24");

MH_CreateHook(reinterpret_cast<void*>(is_glow_addr),&hooks::is_glow,reinterpret_cast<void**>(&fn_is_glow));

MH_CreateHook(reinterpret_cast<void*>(glow_color_addr),&hooks::glow_color ,reinterpret_cast<void**>(&fn_glow_color));

MH_EnableHook(reinterpret_cast<void*>(is_glow_addr));
MH_EnableHook(reinterpret_cast<void*>(glow_color_addr));
}
далее просто вызываем initialize_glow_hook в dll main


На будущее,
1778506194937.png

можно вставлять код нормальным образом
 
Назад
Сверху Снизу