Kod:
#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()
}
}
}