Thread: [TUT] Semiclip
View Single Post
stupok
Veteran Member
Join Date: Feb 2006
Old 08-19-2007 , 14:43   Re: [TUT] Semiclip
Reply With Quote #7

I tried to optimize it, tell me what you think:

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 }
__________________
stupok is offline