Just bored to have a quick try.
PHP Code:
#include amxmodx
#include fakemeta
#include hamsandwich
#define IsPlayer(%1) (1 <= %1 <= g_MaxClients)
#define GetBits(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetBits(%1,%2) (%1 |= (1 << (%2 & 31)))
#define ClrBits(%1,%2) (%1 &= ~(1 << (%2 & 31)))
new g_IsAlive, g_IsAimingPlayer;
new g_RenderTarget[33];
new g_PlayerColor[33][3];
new g_fnAddToFullPack;
new g_MaxClients;
public plugin_init()
{
register_event("Health", "EventHealth", "b");
register_forward(FM_TraceLine, "TraceLine_Post", 1);
RegisterHam(Ham_Spawn, "player", "PlayerLife", 1);
RegisterHam(Ham_Killed, "player", "PlayerLife", 1);
g_MaxClients = get_maxplayers();
}
public client_disconnect( id )
{
ClrBits(g_IsAlive, id);
ClrAimingPlayer(id);
}
public PlayerLife( id )
{
if( is_user_alive(id) )
{
SetBits(g_IsAlive, id);
}
else
{
ClrBits(g_IsAlive, id);
ClrAimingPlayer(id);
}
}
public TraceLine_Post( Float:start[3], Float:end[3], conditions, id, trace )
{
if( IsPlayer(id) && GetBits(g_IsAlive, id) )
{
new hit = get_tr2(trace, TR_pHit);
if( IsPlayer(hit) )
SetAimingPlayer(id, hit);
else
ClrAimingPlayer(id);
}
}
public AddToFullPack_Post( es, e, ent, host, flags, player, set )
{
if( player && g_RenderTarget[host] == ent )
{
set_es(es, ES_RenderFx , kRenderFxGlowShell);
set_es(es, ES_RenderColor, g_PlayerColor[ent]);
}
}
public EventHealth( id )
{
switch( read_data(1) )
{
case 0 .. 24:
g_PlayerColor[id] = {255, 0, 0};
case 25 .. 49:
g_PlayerColor[id] = {255, 189, 59};
case 50 .. 74:
g_PlayerColor[id] = {5, 97, 212};
default:
g_PlayerColor[id] = {51, 168, 87};
}
}
SetAimingPlayer( id, player )
{
g_RenderTarget[id] = player;
SetBits(g_IsAimingPlayer, id);
if( !g_fnAddToFullPack )
g_fnAddToFullPack = register_forward(FM_AddToFullPack, "AddToFullPack_Post", 1);
}
ClrAimingPlayer( id )
{
g_RenderTarget[id] = 0;
ClrBits(g_IsAimingPlayer, id);
if( !g_IsAimingPlayer && g_fnAddToFullPack )
{
unregister_forward(FM_AddToFullPack, g_fnAddToFullPack, 1);
g_fnAddToFullPack = 0;
}
}
Don't know if this is better,.
__________________