#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
new xPut;
new xSpawn;
new xDie;
new xKill;
new xdisc;
new xscan;
new xcon;
new xinfo;
new bool:g_vip[33];
#define is_user_valid(%1) (1 <= %1 <= get_maxplayers())
#define is_user_vip(%1) ( g_vip[%1] )
public plugin_init()
{
register_plugin("VIP Api","1.4","LordOfNothing & cyby");
xPut = CreateMultiForward("vip_putinserver", ET_IGNORE, FP_CELL);
xSpawn = CreateMultiForward("vip_spawn", ET_IGNORE, FP_CELL);
xKill = CreateMultiForward("vip_kill", ET_IGNORE, FP_CELL);
xDie = CreateMultiForward("vip_die", ET_IGNORE, FP_CELL);
xdisc = CreateMultiForward("vip_disconnect", ET_IGNORE, FP_CELL);
xscan = CreateMultiForward("vip_think", ET_IGNORE, FP_CELL);
xcon = CreateMultiForward("vip_connect", ET_IGNORE, FP_CELL);
xinfo = CreateMultiForward("vip_infochanged", ET_IGNORE, FP_CELL);
RegisterHam(Ham_Spawn, "player", "HookSpawnVip", 1);
RegisterHam(Ham_Killed, "player", "HookKilledVip", 1);
register_forward(FM_PlayerPreThink, "PlayerIsThink");
}
public PlayerIsThink(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xscan, ret, id);
}
}
public plugin_natives()
{
register_library("vip_api");
register_native("get_user_vip", "native_get_vip", 1)
register_native("set_user_vip", "native_set_vip", 1)
}
public HookSpawnVip(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xSpawn, ret, id)
}
}
public native_get_vip(id)
{
if(!is_user_valid(id))
return -1;
return g_vip[id];
}
public native_set_vip(id, value)
{
if(!is_user_valid(id))
return false;
if(value)
g_vip[id] = true
else
g_vip[id] = false
return true;
}
public HookKilledVip(victim,attacker,shouldgib)
{
if(is_user_vip(victim) && !is_user_alive(victim))
{
new ret;
ExecuteForward(xDie, ret, victim)
}
if(is_user_vip(attacker) && is_user_alive(attacker))
{
new xret;
ExecuteForward(xKill, xret, attacker)
}
}
public client_putinserver(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xPut, ret, id)
}
}
public client_infochanged(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xinfo, ret, id)
g_vip[id] = false;
}
}
public client_connect(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xcon, ret, id)
g_vip[id] = false;
}
}
public client_disconnect(id)
{
if(is_user_vip(id))
{
new ret;
ExecuteForward(xdisc, ret, id)
g_vip[id] = false;
}
}