#include <amxmodx>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#define PLUGIN "Ramdon AWP per team"
#define VERSION "2.7"
#define AUTHOR "Sugisaki"
new carrier_ct, carrier_tt
new bool:is_carrier[32]
new szCvar_HP[] = "amx_rm_awp_armor"
new szCvar_AR[] = "amx_rm_awp_health"
new szCvar_Min_p[] = "amx_rm_awp_min_players"
new pCvar_announ
new szAwp_model[] = "models/w_awp.mdl"
new Sync
new Sync2
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar(szCvar_AR, "100")
register_cvar(szCvar_HP, "150")
register_cvar(szCvar_Min_p, "2")
register_concmd("amx_rm_awp_announce_type", "pfn_switch_announce_type")
register_logevent("round_start", 2, "1=Round_Start")
register_logevent("round_end", 2, "1=Round_End")
register_event("TextMsg","round_end","a","2&#Game_will_restart_in")
RegisterHam(Ham_Killed, "player", "pfn_Player_Killed", 1)
register_message(get_user_msgid("StatusIcon"), "pfn_Buy_Touch")
register_forward(FM_AddToFullPack, "pfn_AddToFullPack", 1)
Sync = CreateHudSyncObj()
Sync2 = CreateHudSyncObj()
pCvar_announ = 1
set_task(1.5, "plugin_cfg")
}
stock color_print(id,type,text[],...)
{
new text_buffer[255];
vformat(text_buffer,254,text,4);
replace_all(text_buffer,254,"!n","^1");
replace_all(text_buffer,254,"!t","^3");
replace_all(text_buffer,254,"!g","^4");
message_begin(type,get_user_msgid("SayText"),{0,0,0},id);
write_byte(id);
write_string(text_buffer);
message_end();
}
strip_awp(id)
{
static ent
ent = -1
ent = find_ent_by_owner(ent, "weapon_awp", id)
if(pev(id,pev_weapons) & (1<<get_weaponid("weapon_awp")))
{
ExecuteHamB(Ham_Weapon_RetireWeapon, ent)
ExecuteHamB(Ham_RemovePlayerItem,id,ent)
ExecuteHamB(Ham_Item_Kill, ent)
set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<get_weaponid("weapon_awp")))
}
}
equipment(id)
{
strip_user_weapons(id)
give_item(id,"weapon_awp")
give_item(id, "weapo_knife")
give_item(id,"weapon_hegrenade")
cs_set_user_bpammo(id, CSW_AWP, 30)
cs_set_user_armor(id, get_cvar_num("amx_rm_awp_armor"), CS_ARMOR_VESTHELM)
set_user_health(id, get_cvar_num("amx_rm_awp_health"))
}
fn_random(const team[])
{
static players[32], count, tempid
get_players(players, count, "ae", team)
if(!count) return
tempid = players[random(count)]
switch(team[0])
{
case 'T' : carrier_tt = tempid
case 'C' : carrier_ct = tempid
}
equipment(tempid)
pfn_transfmenu(tempid)
is_carrier[tempid] = true
get_user_name(tempid, players, charsmax(players))
color_print(tempid, MSG_ALL, "!n[AMXX] !t%s !nHa sido seleccionado para portar el awp", players)
set_pdata_int(tempid, 235, get_pdata_int(tempid, 235) & ~(1<<0))
message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, tempid)
write_byte(0)
write_string("buyzone")
write_byte(0)
write_byte(0)
write_byte(0)
message_end()
set_task(1.0, "pfn_hud", tempid, _,_, "b")
players[0] = EOS // get_players elimina todo el array antes de sobre escribir, pero por si acaso ^_^
count = 0
}
public plugin_cfg()
{
server_cmd("amx_restrict on awp")
set_cvar_num("mp_freezetime", "0")
}
public pfn_switch_announce_type(id)
{
if(!(get_user_flags(id) & ADMIN_CHAT))
{
console_print(id, "[AMXX] No tienes acceso a este comando")
return PLUGIN_HANDLED
}
new out[3], num
read_argv(1, out, 2)
if(!out[0])
{
console_print(id, "[AMXX] amx_rm_awp_announce_type vale '%i'", pCvar_announ)
return PLUGIN_HANDLED
}
num = str_to_num(out)
if(!(1<= num <= 2))
{
console_print(id, "[AMXX] El valor solo puede ser 1 o 2")
console_print(id, "[AMXX] 1 Hud, 2 Say")
return PLUGIN_HANDLED
}
pCvar_announ = num
console_print(id, "[AMXX] El valor se ha cambiado a %i, el anuncio de mostrara en el %s", pCvar_announ, pCvar_announ == 1 ? "hud" : "say")
return PLUGIN_HANDLED
}
public round_start()
{
if(get_playersnum() < get_cvar_num(szCvar_Min_p))
{
client_print(0, print_chat, "[AMXX] No hay jugadores suficientes para dar el AWP")
client_print(0, print_chat, "[AMXX] Minimo de jugadores que nesecitados '%i' y hay '%i' jugadores", get_cvar_num("amx_rm_awp_min_players"), get_playersnum())
return
}
fn_random("CT")
fn_random("TERRORIST")
}
public pfn_Player_Killed(id)
{
if(!is_user_connected(id) || !is_carrier[id]) return
switch(pCvar_announ)
{
case 1 :
{
set_hudmessage(get_user_team(id) == 1 ? 255 : 0 , 0, get_user_team(id) == 2 ? 255 : 0 , -1.0, 0.30, 0, 6.0, 5.0)
ShowSyncHudMsg(0, Sync, "El portador del awp %s ha muerto", get_user_team(id) == 1 ? "TT" : "CT")
}
case 2 : color_print(id, MSG_ALL, "!n[!gAMXX!n] El !gportador !ndel awp !t%s !nha muerto", get_user_team(id) == 1 ? "TT" : "CT")
}
is_carrier[id] = false
}
public round_end()
{
is_carrier[carrier_ct] = false
is_carrier[carrier_tt] = false
if(is_user_alive(carrier_ct))
strip_awp(carrier_ct)
if(is_user_alive(carrier_tt))
strip_awp(carrier_tt)
if(task_exists(carrier_ct))
remove_task(carrier_ct)
if(task_exists(carrier_tt))
remove_task(carrier_tt)
give_item(carrier_ct, "weapon_knife")
give_item(carrier_tt, "weapon_knife")
give_item(carrier_ct, "weapon_usp")
cs_set_user_bpammo(carrier_ct, CSW_USP, 24)
cs_set_user_bpammo(carrier_tt, CSW_GLOCK18, 40)
}
public client_disconnected(id)
{
if(!is_user_connected(id) || !is_carrier[id]) return
switch(pCvar_announ)
{
case 1 :
{
set_hudmessage(get_user_team(id) == 1 ? 255 : 0 , 0, get_user_team(id) == 2 ? 255 : 0, -1.0, 0.30, 0, 6.0, 5.0)
ShowSyncHudMsg(0, Sync, "El portador del awp %s se ha desconectado", get_user_team(id) == 1 ? "TT" : "CT")
}
case 2: color_print(id, MSG_ALL, "!n[AMXX] El portador del awp !t%s !nse ha desconectado", get_user_team(id) == 1 ? "TT" : "CT")
}
remove_task(id)
is_carrier[id] = false
}
public pfn_touch(ent, id)
{
if(!is_valid_ent(ent) || !is_user_alive(id)) return PLUGIN_HANDLED
static model[sizeof szAwp_model +2], Class[13]
entity_get_string(ent, EV_SZ_classname, Class, charsmax(Class))
if(equal(Class, "weaponbox"))
{
entity_get_string(ent, EV_SZ_model, model, charsmax(model))
if(equal(model, szAwp_model))
{
if(is_carrier[id])
return PLUGIN_CONTINUE
else
return PLUGIN_HANDLED
}
else
if(!is_carrier[id])
return PLUGIN_CONTINUE
else
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public pfn_hud(id)
{
if(!is_user_alive(id))
remove_task(id)
set_hudmessage(get_user_team(id) == 1 ? 250 : 50, 50, get_user_team(id) == 2 ? 250 : 50, 0.0, 0.85, 0, 0.0, 1.0 + 0.1, 0.0, 0.0, -1)
ShowSyncHudMsg(id, Sync2, "Eres el Portador del awp ^nVida: [%i]/[%i] Chaleco: [%i]/[%i]", get_user_health(id), get_cvar_num("amx_rm_awp_health"), get_user_armor(id), get_cvar_num("amx_rm_awp_armor"))
}
public pfn_AddToFullPack(es, e, ent, host, hostflags, player, pSet)
{
if(!player) return
if(is_carrier[ent])
{
static color[3]
color[0] = get_user_team(ent) == 1 ? 255 : 0
color[1] = 0
color[2] = get_user_team(ent) == 2 ? 255 : 0
set_es(es, ES_RenderFx, kRenderFxGlowShell)
set_es(es, ES_RenderColor, color)
set_es(es, ES_RenderAmt, 10)
}
}
public pfn_Buy_Touch(m, d, id)
{
static szIcon[8]
get_msg_arg_string(2, szIcon, charsmax(szIcon))
if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
{
if(is_carrier[id])
{
set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
return PLUGIN_HANDLED
}
else
{
set_pdata_int(id, 235, get_pdata_int(id, 235) & (1<<0))
return PLUGIN_CONTINUE
}
}
return PLUGIN_CONTINUE
}
public pfn_transfmenu(id)
{
new menu = menu_create("\yDeseas transferir el awp? ^n^n\rNota: Si dices que ^"no^" no podras hacer este cambio", "mh_transf")
menu_additem(menu, "Si")
menu_additem(menu, "No")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu)
}
public mh_transf(id, menu, item)
{
if(item == MENU_EXIT || !is_user_alive(id) || !is_carrier[id])
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
menu_destroy(menu)
switch(item)
{
case 0 :
{
new team[13], name[32], count
get_user_team(id, team, 12)
get_players(name, count, "ae", team)
if(count == 1 || !count)
return PLUGIN_HANDLED
get_user_name(id, name, 31)
color_print(id, MSG_ALL, "!n[AMXX] !t%s !ndecidio transferir el awp", name)
is_carrier[id] = false
strip_awp(id)
set_user_armor(id, 0)
give_item(id, "weapon_knife")
switch(team[0])
{
case 'T' :
{
give_item(id, "weapon_glock18")
cs_set_user_bpammo(id, CSW_GLOCK18, 40)
}
case 'C' :
{
give_item(id, "weapon_usp")
cs_set_user_bpammo(id, CSW_USP, 24)
}
}
remove_task(id)
fn_random(team)
}
}
return PLUGIN_HANDLED
}