public hook_on
if (climber_status[id] == STATUS_CLIMBING) { set_hudmessage(255, 0, 0, -1.0, 0.1, 1, 0.0, 3.0, 0.0, 0.0, 4) show_hudmessage(id, "%L",LANG_PLAYER,"STOP_CLIMBTIMER") climber_status[id] = STATUS_NONE climber_hud[id] = 1 hook_off(id) }
i działa to tak uruchamiam timer użwyam komendy +hook timer się zatrzymuje/resetuje
ale został problem że w trakcie używania hook'a można uruchomić timer który się nie zatrzymuje/resetuje
wszsytko jest pokazane na demie http://amxx.pl/files/hook_150.rar
public give_hook(id,level,cid) { if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED new name[32] get_user_name(id,name,32) new szarg1[32], szarg2[8], bool:mode read_argv(1,szarg1,32) read_argv(2,szarg2,32) if(equal(szarg2,"on")) mode = true if(equal(szarg1,"@ALL")) { for(new i=1;i<=get_maxplayers();i++) { if(is_user_connected(i) && is_user_alive(i)) { canusehook[i-1] = mode if(mode) { client_print(i,print_chat,"[ProKreedz] Admin %s gave you ability to use hook",name) client_print(i,print_chat,"[ProKreedz] Just bind '+hook' on a key, you want") } else client_print(i,print_chat,"[ProKreedz] Admin %s removed your ability to use hook",name) } } } else { new pid = cmd_target(id,szarg1,2) if(pid > 0) { canusehook[pid-1] = mode if(mode) { client_print(pid,print_chat,"[ProKreedz] Admin %s gave you ability to use hook",name) client_print(pid,print_chat,"[ProKreedz] Just bind '+hook' on a key, you want") } else client_print(pid,print_chat,"[ProKreedz] Admin %s removed your ability to use hook",name) } } return PLUGIN_HANDLED } // ================================================================================================= public hook_on(id,level,cid, const uc_handle, not_used) { if(!canusehook[id-1] && !cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if (!is_user_alive(id)) { ColorChat(id, GREEN, "%s %s%L",PLUGIN_PREFIX,Y_L,LANG_PLAYER,"NOT_PLAYER_ACTION") return PLUGIN_HANDLED } get_user_origin(id,hookorigin[id-1],3) if (climber_status[id] == STATUS_CLIMBING) { set_hudmessage(255, 0, 0, -1.0, 0.1, 1, 0.0, 3.0, 0.0, 0.0, 4) show_hudmessage(id, "%L",LANG_PLAYER,"STOP_CLIMBTIMER") climber_status[id] = STATUS_NONE climber_hud[id] = 1 hook_off(id) } //if(callfunc_begin("detect_cheat","prokreedz.amxx") == 1) { //callfunc_push_int(id) //callfunc_push_str("Hook") //callfunc_end() //} ishooked[id-1] = true emit_sound(id,CHAN_STATIC,"weapons/xbow_hit2.wav",1.0,ATTN_NORM,0,PITCH_NORM) set_task(0.1,"hook_task",id,"",0,"ab") hook_task(id) return PLUGIN_HANDLED } // ================================================================================================= public is_hooked(id) { return ishooked[id-1] } // ================================================================================================= public hook_off(id) { remove_hook(id) return PLUGIN_HANDLED } // ================================================================================================= public hook_task(id) { if(!is_user_connected(id) || !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-1],origin) if(distance > 25) { velocity[0] = (hookorigin[id-1][0] - origin[0]) * (2.0 * 300 / distance) velocity[1] = (hookorigin[id-1][1] - origin[1]) * (2.0 * 300 / distance) velocity[2] = (hookorigin[id-1][2] - origin[2]) * (2.0 * 300 / distance) entity_set_vector(id,EV_VEC_velocity,velocity) } else { entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0}) remove_hook(id) } } // ================================================================================================= public draw_hook(id) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(1) // TE_BEAMENTPOINT write_short(id) // entid write_coord(hookorigin[id-1][0]) // origin write_coord(hookorigin[id-1][1]) // origin write_coord(hookorigin[id-1][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(0) // noise if(get_user_team(id) == 1) { // Terrorist write_byte(255) // r write_byte(0) // g write_byte(0) // b } else { // Counter-Terrorist write_byte(0) // r write_byte(0) // g write_byte(255) // b } write_byte(150) // brightness write_byte(0) // speed message_end() } public remove_hook(id) { if(task_exists(id)) remove_task(id) remove_beam(id) ishooked[id-1] = false } public remove_beam(id) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(99) // TE_KILLBEAM write_short(id) message_end() }