In a private plugin i've never finished so i've never released, i'm using 1 entity per player (so players don't beel at the same time as in gore plugin and next bleed time is randomized) :
But you could manage with only 1 thinking entity ;)
PHP Code:
UTIL_CreateFollowingEnt(id)
{
static iEnt, HamHook:Think
iEnt = engfunc(EngFunc_CreateNamedEntity, g_iInfoTarget)
if(pev_valid(iEnt))
{
set_pev(iEnt, pev_aiment, id)
set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW)
set_pev(iEnt, pev_owner, id)
set_pev(iEnt, pev_nextthink, get_gametime() + random_float(1.0, 4.0))
g_iBleeding[id] = iEnt
set_pev(iEnt, pev_iuser1, BLEED_ENT)
if( !Think )
{
Think = RegisterHamFromEntity(Ham_Think, iEnt, "Think_Bleed")
}
}
}
public Think_Bleed(iEnt)
{
if( pev(iEnt, pev_iuser1) == BLEED_ENT && UTIL_Bleed(iEnt) )
{
set_pev(iEnt, pev_nextthink, get_gametime() + random_float(2.0, 6.0))
}
}
RemoveBleed(id)
{
new iBleed = g_iBleeding[id]
if( pev_valid( iBleed ) )
{
set_pev(iBleed, pev_flags, FL_KILLME)
g_iBleeding[id] = 0
}
}
UTIL_Bleed(iEnt)
{
new id = pev(iEnt, pev_owner)
if( !IsAlive[id] )
{
if(g_iBleeding[id]) // o_O
{
set_pev(g_iBleeding[id], pev_flags, FL_KILLME)
g_iBleeding[id] = 0
}
return 0
}
new trace_handled
new Float:flFraction, Float:fDirection[3]
new Float:start[3], Float:dest[3]
trace_handled = create_tr2()
pev(id, pev_origin, start)
dest[0] = start[0]
dest[1] = start[1]
dest[2] = start[2] - 9999.0
engfunc(EngFunc_TraceLine, start, dest, IGNORE_MONSTERS, id, trace_handled)
get_tr2(trace_handled, TR_flFraction, flFraction)
if( flFraction != 1.0 )
{
fDirection[0] = random_float(-1.0, 1.0)
fDirection[1] = random_float(-1.0, 1.0)
fDirection[2] = random_float(-1.0, 0.0)
ExecuteHam(Ham_TraceBleed, id, 50.0, fDirection, trace_handled, DMG_BULLET)
UTIL_BloodStream(start, fDirection, 70, 50 - get_user_health(id))
}
free_tr2(trace_handled)
return 1
}
__________________