Короче что-то типа такого по фиксу нужно, как щяс в гемини начал хуярить. И здесь не надо чекать модели
C++:
void __fastcall Hooks::DrawModelExecute(void* ecx, void* edx, IMatRenderContext* context, const DrawModelState_t& state, const ModelRenderInfo_t& info, matrix3x4_t* matrix)
{
static auto oDrawModelExecute = g_Hooks.pModelHook->GetOriginal<DrawModelExecute_t>(vtable_indexes::dme);
if (!Globals::LocalPlayer)
{
oDrawModelExecute(ecx, context, state, info, matrix);
g_pModelRender->ForcedMaterialOverride(NULL);
return;
}
C_BaseEntity* pPlayerEntity = g_pEntityList->GetClientEntity(info.index);
if (!pPlayerEntity)
{
oDrawModelExecute(ecx, context, state, info, matrix);
g_pModelRender->ForcedMaterialOverride(NULL);
return;
}
ClientClass* EntityClass = pPlayerEntity->GetClientClass();
if (!pPlayerEntity || !EntityClass)
{
oDrawModelExecute(ecx, context, state, info, matrix);
g_pModelRender->ForcedMaterialOverride(NULL);
return;
}
//Ебашим здесь, потому что все проверки выше прошли
static IMaterial* mat_overlay;
static bool once{ false };
if (!once)
{
std::ofstream("csgo/materials/glowOverlay.vmt") << R"#("VertexLitGeneric" {
"$additive" "1"
"$envmap" "models/effects/cube_white"
"$envmaptint" "[0 0.2 0.1]"
"$envmapfresnel" "1"
"$envmapfresnelminmaxexp" "[0 1 2]"
"$alpha" "0.8"
})#";
mat_overlay = g_pMaterialSys->FindMaterial("glowOverlay", nullptr);
once = true;
}
//Модель игрока
if (EntityClass->ClassID == (int)EClassIds::CCSPlayer)
{
//Враги
if (Globals::LocalPlayer->GetTeam() != pPlayerEntity->GetTeam())
{
g_pModelRender->ForcedMaterialOverride(mat_overlay);
oDrawModelExecute(ecx, context, state, info, matrix);
}
}
oDrawModelExecute(ecx, context, state, info, matrix);
g_pModelRender->ForcedMaterialOverride(NULL);
}