Found a snippet in
https://devsapps.com:8929/sourcemod/...der_effects.sp
Code:
stock int AttachParticle(int client, char[] particleType)
{
int particle = CreateEntityByName("info_particle_system");
if(IsValidEntity(particle))
{
SetEntPropEnt(particle, Prop_Data, "m_hOwnerEntity", client);
DispatchKeyValue(particle, "effect_name", particleType);
SetVariantString("!activator");
AcceptEntityInput(particle, "SetParent", client, particle, 0);
SetVariantString("forward");
AcceptEntityInput(particle, "SetParentAttachment", particle , particle, 0);
DispatchSpawn(particle);
AcceptEntityInput(particle, "start");
ActivateEntity(particle);
float pos[3];
GetEntPropVector(particle, Prop_Send, "m_vecOrigin", pos);
pos[2] += 12.0;
float vec_start[3];
AddInFrontOf(pos, NULL_VECTOR, 12.0, vec_start);
TeleportEntity(particle, vec_start, NULL_VECTOR, NULL_VECTOR);
return EntIndexToEntRef(particle);
}
return -1;
}
/***********************************************************/
/******************** IS VALID ENTITY **********************/
/***********************************************************/
stock bool IsValidEntRef(int entity)
{
if( entity && EntRefToEntIndex(entity) != INVALID_ENT_REFERENCE )
return true;
return false;
}
/***********************************************************/
/********************* REMOVE ENTITY ***********************/
/***********************************************************/
void RemoveEntity(int ref)
{
int entity = EntRefToEntIndex(ref);
if (entity != -1)
{
AcceptEntityInput(entity, "Kill");
ref = INVALID_ENT_REFERENCE;
}
}
/***********************************************************/
/*************** PRECACHE PARTICLE EFFECT ******************/
/***********************************************************/
stock void PrecacheParticleEffect(const char[] sEffectName)
{
static int table = INVALID_STRING_TABLE;
if (table == INVALID_STRING_TABLE)
{
table = FindStringTable("ParticleEffectNames");
}
bool save = LockStringTables(false);
AddToStringTable(table, sEffectName);
LockStringTables(save);
}
stock void AddInFrontOf(float vecOrigin[3], float vecAngle[3], float units, float output[3])
{
float vecAngVectors[3];
vecAngVectors = vecAngle; //Don't change input
GetAngleVectors(vecAngVectors, vecAngVectors, NULL_VECTOR, NULL_VECTOR);
for (int i; i < 3; i++)
{
output[i] = vecOrigin[i] + (vecAngVectors[i] * units);
}
}
__________________