Code:
#include <amxmodx>
#include <fakemeta>
new g_SemiclipThinkerClassname[] = "env_semiclip"
new g_SemiclipThinker
#define MAX_PLAYERS 32
new g_maxplayers
new bool:g_restart_attempt[MAX_PLAYERS + 1]
new bool:g_is_user_alive[MAX_PLAYERS + 1]
public plugin_init()
{
register_plugin("Semiclip Test 4","1.0","Hawk552")
register_forward(FM_Think, "forward_Think")
//VEN's method to capture player spawn
register_event("ResetHUD", "event_hud_reset", "be")
register_clcmd("fullupdate", "clcmd_fullupdate")
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_will_restart_in")
register_event("DeathMsg", "event_death", "a")
g_maxplayers = global_get(glb_maxClients)
new Ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
if(!pev_valid(Ent))
return
set_pev(Ent,pev_classname,g_SemiclipThinkerClassname)
new Float:Time
global_get(glb_time,Time)
set_pev(Ent,pev_nextthink,Time + 0.01)
dllfunc(DLLFunc_Spawn,Ent)
g_SemiclipThinker = Ent
}
public forward_Think(Ent)
{
if(Ent != g_SemiclipThinker)
return
static i,Float:Time
for(i=0;i<=g_maxplayers;i++)
{
if(g_is_user_alive[i])
{
set_pev(i,pev_solid,IsColliding(i) ? SOLID_NOT : SOLID_BBOX)
}
}
global_get(glb_time,Time)
set_pev(Ent,pev_nextthink,Time + 0.01)
}
stock IsColliding(id)
{
if(pev(id,pev_flags) & FL_ONGROUND || pev(id,pev_button) & IN_JUMP)
return false
static Ent,Float:Origin[3]
pev(id,pev_origin,Origin)
while((Ent = engfunc(EngFunc_FindEntityInSphere,Ent,Origin,36.0)) != 0)
if(Ent > 0 && Ent <= g_maxplayers && g_is_user_alive[Ent])
return true
return false
}
public clcmd_fullupdate()
{
return PLUGIN_HANDLED_MAIN
}
public event_restart_attempt()
{
new players[32], num
get_players(players, num, "a")
for (new i; i < num; ++i)
g_restart_attempt[players[i]] = true
}
public event_hud_reset(id)
{
if (g_restart_attempt[id])
{
g_restart_attempt[id] = false
return
}
event_player_spawn(id)
}
// this function is called on player spawn
public event_player_spawn(id)
{
g_is_user_alive[id] = true
}
public event_death(id)
{
g_is_user_alive[read_data(2)] = false
}