Use an array of bits to determine which player one can see.
Code:
#define SetPlayerBit(%1,%2) (%1 |= (1<<(%2&31)))
#define ClearPlayerBit(%1,%2) (%1 &= ~(1 <<(%2&31)))
#define CheckPlayerBit(%1,%2) (%1 & (1<<(%2&31)))
new g_visiblePlayers[33]
// Return whether target is set as visible to player
IsPlayerVisible(player, target)
{
return CheckPlayerBit(g_visiblePlayers[player], target) ? true : false
}
// Make target visible to player
MakePlayerVisible(player, target)
{
SetPlayerBit(g_visiblePlayers[player], target);
}
// Make target invisible to player
MakePlayerInvisible(player, target)
{
ClearPlayerBit(g_visiblePlayers[player], target);
}
Your would do something like this
Code:
public client_AddToFullPack_P(es, e, ent, id, hostflags, player, pSet)
{
if (player && (1 <= ent <= MaxClients) && !IsPlayerVisible(id, ent))
{
set_es(es, ES_Effects, EF_NODRAW)
}
}
MaxClients may be replaced with a global variable holding the number of max players
Code:
new g_maxPlayers
public plugin_init()
{
g_maxPlayers = get_maxplayers()
}
__________________