NoSmoke (Removal)

Что это такое:

Убирает спрайты, либо серый цвет дымовой гранаты. Несколько вариантов исполнения.

Вариант 1:

1) Нужны Engine Functions -> Нужен хук Engine Functions - pfnHookEvent -> В нём хук createsmoke.sc

Code:
void My_createsmoke(struct event_args_s *args)
{
if(cvar.nosmoke)
return;
else
createsmoke(args);
}

2) Пожалуй самый корректный способ.

 

Вариант 2:

1) Нужны хуки glBegin и glVertex3fv

Code:
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

Code:
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. В нём:

Code:
if (strstr(modelname, "black_smoke")||strstr(modelname, "fast_wallpuff"))) 
	return 0;

2) Быстро, компактно.

 

Copyright (c) Troll

Hosted by uCoz
мEн