#include <sdktools>
#define SPRITEPATH "rank/rankup" // Путь к спрайту (без папки materials/ и формата файла vtf/vmt)
#define SCALE "1.0" // Размер спрайта
#define HEIGHT 0.0 // Высота спрайта от позиции бомбы / 0.0 - стандратная позиция
#define DELETEDEFUSE 1 // Удалить спрайт после того как бомбу обезвредили? / любое другое значение - не удалять
#define DELETEEXPLODE 1 // Удалить спрайт после того как бомба взорвалась? / любое другое значение - не удалять
int g_iEntity;
public void OnPluginStart()
{
HookEvent("bomb_planted", BombPlanted);
HookEvent("bomb_defused", BombEnd);
HookEvent("bomb_exploded", BombEnd);
HookEvent("round_start", RoundStart);
}
public void OnMapStart()
{
char sBuffer[128];
FormatEx(sBuffer, sizeof(sBuffer), "materials/%s.vmt", SPRITEPATH);
AddFileToDownloadsTable(sBuffer);
FormatEx(sBuffer, sizeof(sBuffer), "materials/%s.vtf", SPRITEPATH);
AddFileToDownloadsTable(sBuffer);
FormatEx(sBuffer, sizeof(sBuffer), "%s.vtf", SPRITEPATH);
PrecacheDecal(sBuffer, true);
}
public void BombPlanted(Event hEvent, const char[] sName, bool bDbc)
{
int iEntity = FindEntityByClassname(MaxClients +1, "planted_c4");
if(iEntity != -1)
{
float fPos[3];
GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fPos);
iEntity = CreateEntityByName("env_sprite");
if(iEntity != -1)
{
char sModel[150];
FormatEx(sModel, sizeof(sModel), "materials/%s.vmt", SPRITEPATH);
fPos[2] += HEIGHT;
DispatchKeyValue(iEntity, "classname", "env_sprite");
DispatchKeyValue(iEntity, "model", sModel);
DispatchKeyValue(iEntity, "scale", SCALE);
DispatchKeyValue(iEntity, "rendermode", "1");
DispatchKeyValue(iEntity, "rendercolor", "255 255 255");
DispatchKeyValueVector(iEntity, "origin", fPos);
DispatchSpawn(iEntity);
g_iEntity = EntIndexToEntRef(iEntity);
}
}
}
public void RoundStart(Event hEvent, const char[] sName, bool bDbc)
{
DeleteSprite();
}
public void BombEnd(Event hEvent, const char[] sName, bool bDbc)
{
int i; // warning 205: redundant code: constant expression is zero
if(sName[5] == 'd') i = DELETEDEFUSE;
else i = DELETEEXPLODE;
if(i != 1) return;
DeleteSprite();
}
void DeleteSprite()
{
int iEntity = EntRefToEntIndex(g_iEntity);
if(iEntity != INVALID_ENT_REFERENCE && iEntity > 0 && IsValidEntity(iEntity)) AcceptEntityInput(iEntity, "Kill");
g_iEntity = -1;
}