prokreedz_hook ignore players
how can i make prokreedz_hook to ignore players that i`m aiming ? to touch wall / sky / ground behind player etc, except him ?
here is the plugin,
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta>
#define KZ_LEVEL ADMIN_LEVEL_C
new bool:canusehook[33] new bool:ishooked[33] new hookorigin[33][3]
new Sbeam, g_iMaxPlayers
public plugin_init() { register_plugin("Hook","1.0","p4ddY") register_clcmd("+hook","hook_on") register_clcmd("-hook","hook_off") register_concmd("kz_hook","give_hook",KZ_LEVEL,"<name|#userid|steamid|@ALL> <on/off>")
g_iMaxPlayers = get_maxplayers() }
public plugin_precache() { Sbeam = precache_model("sprites/laserbeam.spr") }
// =================================================================================================
public client_disconnect(id) { remove_hook(id) }
public client_putinserver(id) { remove_hook(id) }
// =================================================================================================
public give_hook(id,level,cid) { if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED new name[32] get_user_name(id,name,31) new szarg1[32], szarg2[8], bool:mode read_argv(1,szarg1,31) read_argv(2,szarg2,7) if(equal(szarg2,"on")) mode = true if(equal(szarg1,"@ALL")) { for(new i=1;i<=g_iMaxPlayers;i++) { if(is_user_alive(i)) { canusehook[i] = mode } } } else { new pid = cmd_target(id,szarg1,2) if(pid > 0) { canusehook[pid] = mode } } return PLUGIN_HANDLED }
// =================================================================================================
public hook_on(id,level,cid) { if(!canusehook[id]) return PLUGIN_HANDLED get_user_origin(id,hookorigin[id],3) if(callfunc_begin("detect_cheat","prokreedz.amxx") == 1) { callfunc_push_int(id) callfunc_push_str("Hook") callfunc_end() } ishooked[id] = true set_task(0.1,"hook_task",id,_,_,"b") hook_task(id) return PLUGIN_HANDLED }
// =================================================================================================
public hook_off(id) { remove_hook(id) return PLUGIN_HANDLED }
// =================================================================================================
public hook_task(id) { if(!is_user_alive(id)) remove_hook(id) remove_beam(id) draw_hook(id) new origin[3], Float:velocity[3] get_user_origin(id,origin) new distance = get_distance(hookorigin[id],origin) if(distance > 25) { velocity[0] = (hookorigin[id][0] - origin[0]) * (2.0 * 300 / distance) velocity[1] = (hookorigin[id][1] - origin[1]) * (2.0 * 300 / distance) velocity[2] = (hookorigin[id][2] - origin[2]) * (2.0 * 300 / distance) set_pev(id,pev_velocity,velocity) } else { set_pev(id,pev_velocity,Float:{0.0,0.0,0.0}) remove_hook(id) } }
// =================================================================================================
public draw_hook(id) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BEAMENTPOINT) write_short(id) // entid write_coord(hookorigin[id][0]) // origin write_coord(hookorigin[id][1]) // origin write_coord(hookorigin[id][2]) // origin write_short(Sbeam) // sprite index write_byte(0) // start frame write_byte(0) // framerate write_byte(100) // life write_byte(10) // width write_byte(5) // noise write_byte(127) // r write_byte(255) // g write_byte(0) // b write_byte(150) // brightness write_byte(3) // speed message_end() }
public remove_hook(id) { remove_task(id) remove_beam(id) ishooked[id] = false }
public remove_beam(id) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(99) // TE_KILLBEAM write_short(id) message_end() }
i have one more problem, my spectators are a kind of solid players because when someone is spectating me, i am stucking in air ...
|