Code: Select all
#include <amxmodx>#include <amxmisc>#include <cstrike>#include <fakemeta>#include <hamsandwich>#include <fun> #define PLUGIN "Jailbreak Last Request"#define VERSION "1.6"#define AUTHOR "rube" /*================================================================================ Variables | bools | Cvars =================================================================================*/ new g_maxPlayers, g_msgSayText, beacon_sprite new cvar_granadas_bpammo, cvar_scout_bpammo, cvar_effect new bool:touch_weapons[33], bool:once[33], bool:player_challenged[33], bool:duel_active,bool:knife_duel[33] ,bool:deagle_duel[33], bool:grenade_duel[33], bool:scout_duel[33] new tag[] = "[JailBreak]" /*================================================================================ Init n' precache =================================================================================*/ public plugin_precache() { beacon_sprite = precache_model("sprites/shockwave.spr")} public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_event("HLTV", "event_round_start", "a", "1=0", "2=0") RegisterHam(Ham_Touch, "weaponbox", "fw_touch_weapon") RegisterHam(Ham_Touch, "armoury_entity", "fw_touch_weapon") RegisterHam(Ham_Touch, "weapon_shield", "fw_touch_weapon") RegisterHam(Ham_Spawn, "player", "fw_player_respawn", 1) RegisterHam(Ham_Killed, "player", "fw_player_killed") register_forward(FM_CmdStart,"fw_cmdstart",1) // Comando de jugador - Client commands register_clcmd("say /lr", "duel_menu") register_clcmd("say !lr", "duel_menu") register_clcmd("say_team /lr", "duel_menu") register_clcmd("say_team !lr", "duel_menu") // Cvars cvar_granadas_bpammo = register_cvar("jb_grenade_bpammo","10") // amount bpammo grenade | cantidad de granadas cvar_scout_bpammo = register_cvar("jb_scout_bpammo", "10") // amount bpammo scout | cantidad de balas pa' la scout cvar_effect = register_cvar("jb_effect", "2") // 0 = glow , 1 = beacon, 2 = glow n' beacon g_maxPlayers = get_maxplayers() g_msgSayText = get_user_msgid("SayText") register_dictionary("jailbreak_last_request.txt")} /*================================================================================ Round Start =================================================================================*/ public event_round_start(){ duel_active = false} /*================================================================================ forwards =================================================================================*/ public fw_player_respawn(id){ if(!is_user_alive(id) || !cs_get_user_team(id)) return set_user_rendering(id) remove_task(id) touch_weapons[id] = false once[id] = false knife_duel[id] = false deagle_duel[id] = false grenade_duel[id] = false scout_duel[id] = false player_challenged[id] = false} public fw_touch_weapon(weapon, id){ if (!is_user_connected(id)) return HAM_IGNORED; new players[32], pnum, tempid; get_players(players, pnum, "a"); for( new i; i<pnum; i++ ) { tempid = players[i]; } if (touch_weapons[id] || touch_weapons[tempid]) return HAM_SUPERCEDE; return HAM_IGNORED;} public fw_cmdstart(player,uc_handle,random_seed){ if(deagle_duel[player]) { cs_set_user_bpammo(player, CSW_DEAGLE, 1) }} public fw_player_killed(victim, attacker, shouldgib){ new name[32] get_user_name(attacker, name, 31) if(duel_active) { if(cs_get_user_team(victim) == CS_TEAM_CT && player_challenged[victim]) { knife_duel[attacker] = false deagle_duel[attacker] = false grenade_duel[attacker] = false scout_duel[attacker] = false once[attacker] = false strip_user_weapons(attacker) give_item(attacker, "weapon_knife") set_user_rendering(attacker) duel_menu(attacker) } else if(cs_get_user_team(victim) == CS_TEAM_CT && !player_challenged[victim]) { set_task(0.4, "kill_player", attacker) set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10) show_hudmessage(0, "%L", LANG_PLAYER,"DUEL_DOWN", name) } } remove_task(attacker) remove_task(victim)} public kill_player(id){ user_kill(id)} /*================================================================================ Main Menu =================================================================================*/ public duel_menu(id){ if(!is_user_alive(id)) return PLUGIN_HANDLED if (!once[id]) { if(cs_get_user_team(id) == CS_TEAM_T) { new cts[32], ts[32], ctsnum, tsnum for (new id=1; id <= g_maxPlayers; id++) { if (!is_user_connected(id) || !is_user_alive(id)) { continue } if (cs_get_user_team(id) == CS_TEAM_T) { ts[tsnum++] = id } else if (cs_get_user_team(id) == CS_TEAM_CT) { cts[ctsnum++] = id } } if (tsnum == 1 && ctsnum >= 1) { static opcion[64] formatex(opcion, charsmax(opcion),"\y%L:", id, "CHOOSE_DUEL") new iMenu = menu_create(opcion, "sub_duel_menu") formatex(opcion, charsmax(opcion),"\w%L", id, "DUEL_1") menu_additem(iMenu, opcion, "1") formatex(opcion, charsmax(opcion),"\w%L", id, "DUEL_2") menu_additem(iMenu, opcion, "2") formatex(opcion, charsmax(opcion),"\w%L", id, "DUEL_3") menu_additem(iMenu, opcion, "3") formatex(opcion, charsmax(opcion),"\w%L", id, "DUEL_4") menu_additem(iMenu, opcion, "4") menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL) menu_display(id, iMenu, 0) } else if (tsnum == 1 && ctsnum < 1) { ChatColor(id, "%L", LANG_PLAYER,"NOT_CTS", tag) } else if (tsnum > 1) { ChatColor(id, "%L", LANG_PLAYER,"ONLY_LAST", tag) } } else { ChatColor(id, "%L", LANG_PLAYER,"ONLY_TTS", tag) } } else { ChatColor(id, "%L", LANG_PLAYER,"KILL_CHALLENGED", tag) } return PLUGIN_HANDLED} public sub_duel_menu(id, menu, item){ if (item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new Data[6], Name[64] new Access, Callback menu_item_getinfo(menu, item, Access, Data,5, Name, 63, Callback) new Key = str_to_num(Data) switch (Key) { case 1: { knife_duel[id] = true choose_enemy(id) } case 2: { deagle_duel[id] = true choose_enemy(id) } case 3: { grenade_duel[id] = true choose_enemy(id) } case 4: { scout_duel[id] = true choose_enemy(id) } } menu_destroy(menu) return PLUGIN_HANDLED} /*================================================================================ Menu of challenges =================================================================================*/ public choose_enemy(id){ static opcion[64] formatex(opcion, charsmax(opcion),"\y%L:", id, "CHOOSE_ENEMY") new iMenu = menu_create(opcion, "sub_choose_enemy") new players[32], pnum, tempid new szName[32], szTempid[10] get_players(players, pnum, "a") for( new i; i<pnum; i++ ) { tempid = players[i] if (cs_get_user_team(tempid) != CS_TEAM_CT) { continue } get_user_name(tempid, szName, 31) num_to_str(tempid, szTempid, 9) menu_additem(iMenu, szName, szTempid, 0) } menu_display(id, iMenu) return PLUGIN_HANDLED} public sub_choose_enemy(id, menu, item){ if( item == MENU_EXIT ) { menu_destroy(menu) return PLUGIN_HANDLED } new Data[6], Name[64] new Access, Callback menu_item_getinfo(menu, item, Access, Data,5, Name, 63, Callback) new tempid = str_to_num(Data) new mapname[32], challenger[32], challenged[32], ct_origin[3], te_origin[3] get_mapname(mapname,31) get_user_name(id, challenger, 31) get_user_name(tempid, challenged, 31) // strip weapons strip_user_weapons(id) strip_user_weapons(tempid) // health set_user_health(id, 100) set_user_health(tempid, 100) // effects switch (get_pcvar_num(cvar_effect)) { case 0: // glow { set_user_rendering(id, kRenderFxGlowShell, 250, 0, 0, kRenderNormal, 20) set_user_rendering(tempid, kRenderFxGlowShell, 0, 0, 250, kRenderNormal, 20) } case 1: // beacon { set_task(1.0, "beacon", id) set_task(1.0, "beacon", tempid) } case 2: // glow n' beacon { set_user_rendering(id, kRenderFxGlowShell, 250, 0, 0, kRenderNormal, 20) set_task(1.0, "beacon", id) set_user_rendering(tempid, kRenderFxGlowShell, 0, 0, 250, kRenderNormal, 20) set_task(1.0, "beacon", tempid) } } // player challenged player_challenged[tempid] = true // lr menu once until he kills the player challenged once[id] = true // unable pick up weapon (only the 2 players on duel) touch_weapons[id] = true touch_weapons[tempid] = true if(knife_duel[id]) { give_item(id, "weapon_knife") give_item(tempid, "weapon_knife") if(equali(mapname,"some1s_jailbreak")) { ct_origin[0] = -759, ct_origin[1] = 1047, ct_origin[2] = 100 te_origin[0] = -585, te_origin[1] = 867, te_origin[2] = 100 set_user_origin(id,te_origin) set_user_origin(tempid,ct_origin) } set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10) show_hudmessage(0, "%L",LANG_PLAYER,"KNIFE_DUEL", challenger, challenged) } else if(deagle_duel[id]) { deagle_duel[tempid] = true cs_set_weapon_ammo(give_item(id, "weapon_deagle"), 1) cs_set_weapon_ammo(give_item(tempid, "weapon_deagle"), 1) if(equali(mapname,"some1s_jailbreak")) { ct_origin[0] = -1352, ct_origin[1] = 271, ct_origin[2] = 38 te_origin[0] = -1338, te_origin[1] = -782, te_origin[2] = 38 set_user_origin(id,te_origin) set_user_origin(tempid,ct_origin) } set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10) show_hudmessage(0, "%L", LANG_PLAYER,"DEAGLE_DUEL", challenger, challenged) } else if(grenade_duel[id]) { give_item(id, "weapon_hegrenade") give_item(tempid, "weapon_hegrenade") cs_set_user_bpammo(id, CSW_HEGRENADE,get_pcvar_num(cvar_granadas_bpammo)) cs_set_user_bpammo(tempid, CSW_HEGRENADE,get_pcvar_num(cvar_granadas_bpammo)) if(equali(mapname,"some1s_jailbreak")) { ct_origin[0] = -1756, ct_origin[1] = -2526, ct_origin[2] = 36 te_origin[0] = -3020, te_origin[1] = -2529, te_origin[2] = 36 set_user_origin(id,te_origin) set_user_origin(tempid,ct_origin) } set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10) show_hudmessage(0, "%L", LANG_PLAYER,"GRENADE_DUEL", challenger, challenged) } else if(scout_duel[id]) { give_item(id, "weapon_scout") give_item(tempid, "weapon_scout") cs_set_user_bpammo(id, CSW_SCOUT, get_pcvar_num(cvar_scout_bpammo)) cs_set_user_bpammo(tempid, CSW_SCOUT, get_pcvar_num(cvar_scout_bpammo)) if(equali(mapname,"some1s_jailbreak")) { ct_origin[0] = -2898, ct_origin[1] = -2040, ct_origin[2] = 37 te_origin[0] = -2908, te_origin[1] = 905, te_origin[2] = 37 set_user_origin(id,te_origin) set_user_origin(tempid,ct_origin) } set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10) show_hudmessage(0, "%L", LANG_PLAYER,"SCOUT_DUEL", challenger, challenged) } duel_active = true menu_destroy(menu) return PLUGIN_HANDLED} public beacon(id){ if(cs_get_user_team(id) == CS_TEAM_CT) { static origin[3] get_user_origin(id, origin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMCYLINDER) // TE id write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]-20) // z write_coord(origin[0]) // x axis write_coord(origin[1]) // y axis write_coord(origin[2]+200) // z axis write_short(beacon_sprite) // sprite write_byte(0) // startframe write_byte(1) // framerate write_byte(6) // life write_byte(2) // width write_byte(1) // noise write_byte(0) // red write_byte(0) // green write_byte(250) // blue write_byte(200) // brightness write_byte(0) // speed message_end() } else { static origin[3] get_user_origin(id, origin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMCYLINDER) // TE id write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]-20) // z write_coord(origin[0]) // x axis write_coord(origin[1]) // y axis write_coord(origin[2]+200) // z axis write_short(beacon_sprite) // sprite write_byte(0) // startframe write_byte(1) // framerate write_byte(6) // life write_byte(2) // width write_byte(1) // noise write_byte(250) // red write_byte(0) // green write_byte(0) // blue write_byte(200) // brightness write_byte(0) // speed message_end() } set_task(1.0, "beacon", id) } /*================================================================================ Stocks =================================================================================*/ stock ChatColor(const id, const input[], any:...){ new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4") // Green Color replace_all(msg, 190, "!y", "^1") // Default Color replace_all(msg, 190, "!team", "^3") // Team Color if (id) players[0] = id else get_players(players, count, "ch") for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, players[i]) write_byte(players[i]) write_string(msg) message_end() } }}