NoSmoke (Removal) |
Что это такое:
Убирает спрайты, либо серый цвет дымовой гранаты. Несколько вариантов исполнения.
Вариант 1:
1) Нужны Engine Functions -> Нужен хук Engine Functions - pfnHookEvent -> В нём хук createsmoke.sc
void My_createsmoke(struct event_args_s *args)
{
if(cvar.nosmoke)
return;
else
createsmoke(args);
}
2) Пожалуй самый корректный способ.
Вариант 2:
1) Нужны хуки glBegin и glVertex3fv
bool bSmoke = false; // В glbegin if(mode == GL_QUADS)
{
GLfloat smokecol[4];
glGetFloatv(GL_CURRENT_COLOR, smokecol);
if((smokecol[0]==smokecol[1]) && (smokecol[0]==smokecol[2]) && (smokecol[0]!=0.0) && (smokecol[0]!=1.0))
bSmoke=true;
else
bSmoke=false;
} // В glVertex3fv if(bSmoke)
{
return;
}
2) Классический gl способ.
Вариант 3:
1) Нужны хуки Engine Functions -> pfnSPR_Load
HSPRITE SPR_Load(const char *szPicName) { if(strstr(szPicName, "gas_puff_01")) return 0; return oEngFuncs.pfnSPR_Load(szPicName); }
2) Быстро, компактно. Примечание: этот способ не полностью убирает дым, один спрайт остаётся.
Вариант 4:
1) Нужeн ClientHook -> HUD_AddEntity. В нём:
if (strstr(modelname, "black_smoke")||strstr(modelname, "fast_wallpuff")))
return 0;
2) Быстро, компактно.
Copyright (c) Troll