/* Plugin: Amx Puke Version: 0.2 Author: KRoTaL 0.1 Release 0.2 Added another sound Commands: To puke on a dead body you have to bind a key to: puke Open your console and write: bind "key" "puke" ex: bind "x" "puke" Then stand still above a dead player (cs/cz only), press your key and you'll puke on them ! You can control the direction of the stream with your mouse. Players can say "/puke" in the chat to get some help. Cvars: amx_maxpukes 6 - Maximum number of times a player is allowed to puke per round. amx_puke_admin 0 - 0 : All the players are allowed to puke 1 : Only admins with ADMIN_LEVEL_A flag are allowed to puke Setup: You need to put these files on your server: sound/puke/puke.wav sound/puke/puke2.wav addons/amx/lang/puke.txt */ // UNCOMMENT IF YOU USE ANOTHER MOD THAN CS and CS-CZ //#define NO_CS_CZ /***************************************************************************************************/ #include new count_puke[33] new bool:PukeFlag[33] new bool:aim[33] new counter[33] #if !defined NO_CS_CZ new player_origins[33][3] #endif public puke_on_player(id) { if (get_cvar_num("amx_maxpukes")==0) return PLUGIN_HANDLED if (!is_user_alive(id)) return PLUGIN_HANDLED if ( (get_cvar_num("amx_puke_admin")==1) && !(get_user_flags(id) & ADMIN_LEVEL_A) ) { console_print(id, "[AMX] You have not access to this command.") return PLUGIN_HANDLED } if(PukeFlag[id]) return PLUGIN_HANDLED #if !defined NO_CS_CZ new player_origin[3], players[32], inum=0, dist, last_dist=99999, last_id get_user_origin(id,player_origin,0) get_players(players,inum,"b") if (inum>0) { for (new i=0;i get_cvar_num("amx_maxpukes")) { client_print(id,print_chat,"You can only puke on a player %d time(s) in a round !", get_cvar_num("amx_maxpukes")) return PLUGIN_CONTINUE } new player_name[32] get_user_name(id, player_name, 31) #if !defined NO_CS_CZ new dead_name[32] get_user_name(last_id, dead_name, 31) client_print(0,print_chat,"%s Is Puking On %s's Dead Body !! HaHaHaHa !!", player_name, dead_name) #else client_print(0,print_chat,"%s Is Puking !!", player_name) #endif count_puke[id]+=1 new ids[1] ids[0]=id PukeFlag[id]=true aim[id]=false counter[id]=0 new rand_sound=random_num(0,1) switch(rand_sound) { case 0: emit_sound(id, CHAN_VOICE, "puke/puke.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) case 1: emit_sound(id, CHAN_VOICE, "puke/puke2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } set_task(0.3,"make_puke",2412+id,ids,1,"a",9) #if !defined NO_CS_CZ } else { client_print(id,print_chat,"There are no dead bodies around you.") return PLUGIN_HANDLED } } #endif return PLUGIN_HANDLED } public sqrt(num) { new div = num new result = 1 while (div > result) { div = (div + result) / 2 result = num / div } return div } public make_puke(ids[]) { new id=ids[0] new vec[3] new aimvec[3] new velocityvec[3] new length get_user_origin(id,vec, 1) get_user_origin(id,aimvec,3) new distance = get_distance(vec,aimvec) new speed = floatround(distance*1.9) velocityvec[0]=aimvec[0]-vec[0] velocityvec[1]=aimvec[1]-vec[1] velocityvec[2]=aimvec[2]-vec[2] length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2]) velocityvec[0]=velocityvec[0]*speed/length velocityvec[1]=velocityvec[1]*speed/length velocityvec[2]=velocityvec[2]*speed/length message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(101) write_coord(vec[0]) write_coord(vec[1]) write_coord(vec[2]-2) write_coord(velocityvec[0]) write_coord(velocityvec[1]) write_coord(velocityvec[2]) write_byte(82) // color write_byte(160) // speed message_end() counter[id]++ if(counter[id]==9) PukeFlag[id]=false } public death_event() { new victim = read_data(2) #if !defined NO_CS_CZ get_user_origin(victim,player_origins[victim],0) #endif if(PukeFlag[victim]) reset_puke(victim) return PLUGIN_CONTINUE } public reset_puke(id) { if(task_exists(2412+id)) remove_task(2412+id) emit_sound(id,CHAN_VOICE,"puke/puke.wav", 0.0, ATTN_NORM, 0, PITCH_NORM) PukeFlag[id]=false return PLUGIN_CONTINUE } public reset_hud(id) { if(task_exists(2412+id)) remove_task(2412+id) emit_sound(id,CHAN_VOICE,"puke/puke.wav", 0.0, ATTN_NORM, 0, PITCH_NORM) PukeFlag[id]=false count_puke[id]=1 return PLUGIN_CONTINUE } public puke_help(id) { client_print(id, print_chat,"To puke on a dead body you have to bind a key to: puke") client_print(id, print_chat,"Open your console and write: bind ^"key^" ^"puke^"") client_print(id, print_chat,"ex: bind ^"x^" ^"puke^"") return PLUGIN_CONTINUE } public handle_say(id) { new said[192] read_args(said,192) remove_quotes(said) if( ((containi(said, "puke") != -1) && !(containi(said, "/puke") != -1)) || ((containi(said, "vomir") != -1) && !(containi(said, "/vomir") != -1)) ) { client_print(id, print_chat,"[AMX] For Puke help say /puke") } return PLUGIN_CONTINUE } public plugin_precache() { if (file_exists("sound/puke/puke.wav")) precache_sound("puke/puke.wav") if (file_exists("sound/puke/puke2.wav")) precache_sound("puke/puke2.wav") return PLUGIN_CONTINUE } public client_connect(id) { PukeFlag[id]=false count_puke[id]=1 return PLUGIN_CONTINUE } public client_disconnect(id) { reset_hud(id) return PLUGIN_CONTINUE } public plugin_init() { register_plugin("AMX Puke","0.2","KRoTaL") register_clcmd("puke","puke_on_player",0,"- Puke on a dead player") register_clcmd("vomir","puke_on_player",0,"- Puke on a dead player") register_clcmd("say /puke","puke_help",0,"- Displays puke help") register_clcmd("say /vomir","puke_help",0,"- Displays puke help") register_clcmd("say","handle_say") register_cvar("amx_maxpukes","6") register_cvar("amx_puke_admin","0") register_event("DeathMsg","death_event","a") register_event("ResetHUD", "reset_hud", "be") return PLUGIN_CONTINUE }