Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
//Remove the '//' on the next line for AMXX 1.76d compadability.
//#define amxx176d
//CVAR Names
#define WEAPON_CVAR "myplugin_weapons"
#define NADE_CVAR "myplugin_nades"
//New CS Weapon Constants
#define MOD_SCOUT 1 //a
#define MOD_XM1014 2 //b
#define MOD_MAC10 4 //c
#define MOD_AUG 8 //d
#define MOD_UMP45 16 //e
#define MOD_SG550 32 //f
#define MOD_GALIL 64 //g
#define MOD_FAMAS 128 //h
#define MOD_AWP 256 //i
#define MOD_MP5NAVY 512 //j
#define MOD_M249 1024 //k
#define MOD_M3 2048 //l
#define MOD_M4A1 4096 //m
#define MOD_TMP 8192 //n
#define MOD_G3SG1 16384 //o
#define MOD_SG552 32768 //p
#define MOD_AK47 65536 //q
#define MOD_P90 131072 //r
#define MOD_P228 262144 //s
#define MOD_ELITE 524288 //t
#define MOD_FIVESEVEN 1048576 //u
#define MOD_USP 2097152 //v
#define MOD_GLOCK18 4194304 //w
#define MOD_DEAGLE 8388608 //x
#define MOD_VEST 16777216//y
#define MOD_VESTHELM 33554432//z
static const weapon_names[26][16] =
{
"Scout",
"XM1014",
"Mac10",
"Aug",
"UMP",
"SG550",
"Galil",
"Famas",
"AWP",
"MP5Navy",
"M249",
"M3",
"M4A1",
"TMP",
"G3SG1",
"SG552",
"AK47",
"P90",
"P228",
"Elite",
"Fiveseven",
"USP",
"Glock18",
"Deagle",
"VEST",
"VESTHELM"
}
new allowableweapons, nades
new bool:firsttime[33]
new bool:ask[33]
new weapon_picked[2][33]
new cur_offset[33]
new options_on_menu[8][33]
public plugin_init()
{
//
register_clcmd("say guns","cmd_guns")
register_clcmd("say_team guns","cmd_guns")
register_concmd("amx_mod_addweap","cmd_addweap",ADMIN_BAN,"<Weapon> Un-Restricts a weapon from the weapons menu.")
register_concmd("amx_mod_removeweap","cmd_delweap",ADMIN_BAN,"<Weapon> Restricts a weapon from the weapons menu.")
register_menucmd(register_menuid("WeaponMethodMenu"),(1<<0)|(1<<1)|(1<<2),"weapon_method_pushed")
register_menucmd(register_menuid("PrimaryWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"prim_weapons_pushed")
register_menucmd(register_menuid("SecWeaponSelect"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7),"sec_weapons_pushed")
#if defined amxx176d
register_cvar(WEAPON_CVAR,"abcdefghijklmnopqrstuvwxyz")
#else
allowableweapons = register_cvar(WEAPON_CVAR,"abcdefghijklmnopqrstuvwxyz")
#endif
#if defined amxx176d
register_cvar(NADE_CVAR,"hhff")
#else
nades = register_cvar(NADE_CVAR,"hhff")
#endif
}
//Call this on player spawn
public weapon_method_menu(id)
{
if(is_user_bot(id))
{
weapon_picked[0][id] = 16
weapon_picked[1][id] = 23
give_weapons(id)
}
else if(firsttime[id])
{
firsttime[id] = false
prim_weapons_menu(id,0)
}
else
{
cur_offset[id] = 0
if(ask[id])
{
show_menu(id,(1<<0)|(1<<1)|(1<<2),"Weapon Selection Method^n^n1. Last Guns^n2. Last Guns + Save^n3. New Guns",-1,"WeaponMethodMenu")
}
else
{
give_weapons(id)
}
}
}
public weapon_method_pushed(id,key)
{
switch(key)
{
case 0:
{
ask[id] = true
give_weapons(id)
}
case 1:
{
client_print(id,print_chat,"[AMXX] Type guns to re-activate the gun menu.")
ask[id] = false
give_weapons(id)
}
case 2:
{
ask[id] = true
prim_weapons_menu(id,0)
}
}
return ;
}
public prim_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=offset;i<19;i++)
{
if(i==18)
{
options_on_menu[curnum][id] = 24
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
break;
}
else if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
if(curnum==8)
break;
}
}
format(menu,2047,"\ySelect Primary Weapon:\w^n^n%s^n",menu)
if(curnum==8 && offset<12)
{
keys += (1<<8)
format(menu,2047,"%s^n9. Next",menu)
}
if(offset)
{
keys += (1<<9)
format(menu,2047,"%s^n0. Back",menu)
}
show_menu(id,keys,menu,-1,"PrimaryWeaponSelect")
}
public prim_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[0][id] = options_on_menu[key][id]
cur_offset[id] = 0
sec_weapons_menu(id,0)
}
else
{
if(key==8)
cur_offset[id] += 8
if(key==9)
cur_offset[id] -= 8
prim_weapons_menu(id,cur_offset[id])
}
return ;
}
public sec_weapons_menu(id,offset)
{
if(offset<0) offset = 0
new cvar_value[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
new keys, curnum, menu[2048]
for(new i=18;i<24;i++)
{
if(flags & power(2,i))
{
options_on_menu[curnum][id] = i
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. %s",menu,curnum,weapon_names[i])
}
}
options_on_menu[curnum][id] = 25
keys += (1<<curnum)
curnum++
format(menu,2047,"%s^n%d. Random",menu,curnum)
format(menu,2047,"\ySelect Secondary Weapon:\w^n^n%s",menu)
show_menu(id,keys,menu,-1,"SecWeaponSelect")
}
public sec_weapons_pushed(id,key)
{
if(key<8)
{
weapon_picked[1][id] = options_on_menu[key][id]
}
give_weapons(id)
return ;
}
public give_weapons(id)
{
strip_user_weapons(id)
give_item(id,"weapon_knife")
new weapon[32]
new csw = csw_contant(weapon_picked[0][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
csw = csw_contant(weapon_picked[1][id])
get_weaponname(csw,weapon,31)
give_item(id,weapon)
cs_set_user_bpammo(id,csw,999)
#if defined amxx176d
get_cvar_string(NADE_CVAR,weapon,31)
#else
get_pcvar_string(nades,weapon,31)
#endif
new he, flash, smoke
for(new i=0;i<strlen(weapon);i++)
{
switch(weapon[i])
{
case 'h': he++
case 'f': flash++
case 's': smoke++
}
}
if(he) give_item(id,"weapon_hegrenade"), cs_set_user_bpammo(id,CSW_HEGRENADE,he)
if(flash) give_item(id,"weapon_flashbang"), cs_set_user_bpammo(id,CSW_FLASHBANG,flash)
if(smoke) give_item(id,"weapon_smokegrenade"), cs_set_user_bpammo(id,CSW_SMOKEGRENADE,smoke)
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,weapon,31)
#else
get_pcvar_string(allowableweapons,weapon,31)
#endif
new flags = read_flags(weapon)
if(flags & MOD_VESTHELM) cs_set_user_armor(id,100,CS_ARMOR_VESTHELM)
else if(flags & MOD_VEST) cs_set_user_armor(id,100,CS_ARMOR_KEVLAR)
}
public csw_contant(weapon)
{
new num = 29
switch(weapon)
{
case 0: num = 3
case 1: num = 5
case 2: num = 7
case 3: num = 8
case 4: num = 12
case 5: num = 13
case 6: num = 14
case 7: num = 15
case 8: num = 18
case 9: num = 19
case 10: num = 20
case 11: num = 21
case 12: num = 22
case 13: num = 23
case 14: num = 24
case 15: num = 27
case 16: num = 28
case 17: num = 30
case 18: num = 1
case 19: num = 10
case 20: num = 11
case 21: num = 16
case 22: num = 17
case 23: num = 26
case 24:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(0,18)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
case 25:
{
new s_weapon[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,s_weapon,31)
#else
get_pcvar_string(allowableweapons,s_weapon,31)
#endif
new flags = read_flags(s_weapon)
do
{
num = random_num(18,23)
if(!(num & flags))
{
num = -1
}
}
while(num==-1)
num = csw_contant(num)
}
}
return num;
}
public cmd_guns(id)
{
ask[id] = true
weapon_method_menu(id)
}
public cmd_delweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
new flags = read_flags(cvar_value)
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new remove_flag = power(2,i)
if(flags & remove_flag)
{
console_print(id,"[AMXX] Removing weapon %s from the choice list.",weapon_names[i])
flags -= remove_flag
get_flags(flags,cvar_value,31)
set_cvar_string(WEAPON_CVAR,cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already off choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}
public cmd_addweap(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1,arg,31)
new cvar_value[32]
#if defined amxx176d
get_cvar_string(WEAPON_CVAR,cvar_value,31)
#else
get_pcvar_string(allowableweapons,cvar_value,31)
#endif
for(new i=0;i<26;i++)
{
if(equali(arg,weapon_names[i]))
{
new flags = read_flags(cvar_value)
new add_flag = power(2,i)
if(!(flags & add_flag))
{
console_print(id,"[AMXX] Adding weapon %s to the choice list.",weapon_names[i])
flags += add_flag
get_flags(flags,cvar_value,31)
set_cvar_string(WEAPON_CVAR,cvar_value)
}
else
{
console_print(id,"[AMXX] Weapon %s is already on choice list.",weapon_names[i])
}
break;
}
}
return PLUGIN_HANDLED
}