#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <csstats>
#define PLUGIN "Weaponmenu"
#define VERSION "1.0"
#define AUTHOR "Demon"
new g_menuPosition[33];
new g_chosenItem[33];
new cSecond;
new cCommand;
new cCommandbuyzone;
new cMoney;
new cColorchat
new cWP;
new cWPlimit;
new cAdvert;
new cNade;
new cCD;
new cSmokerank;
new cFlashrank;
new cEnable;
new gWPCT = 0;
new gWPTE = 0;
new gBadLines[3];
new gLine[8];
new Count[33];
new bool:gHasPlayerBomb[33] = false;
new bool:gAdvert = false;
new bool:already[33];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
register_logevent("logevent_end", 2, "1=Round_End")
register_logevent("logevent_end", 2, "1&Restart_Round");
register_logevent("logevent_end", 2, "1=Game_Commencing");
register_menucmd(register_menuid("Weapon Menu"), 1023, "actionWeaponMenu");
cEnable = register_cvar("wpnmenu_on", "1"); //Plugin ki/be kapcsolasa (ki==0 | be==1)
cSecond = register_cvar("wpnmenu_pistol", "deagle"); //Milyen pisztolyt kapjonak a jatekosok
cCommand = register_cvar("wpnmenu_command", "1"); //Menu behozasa chat parancsra (igen==1 | nem==0)
cCommandbuyzone = register_cvar("wpnmenu_buyzone", "1"); //Parancs csak buy zonaban (csak buyzone==1 | mindenhol==0)
cMoney = register_cvar("wpnmenu_money", "0"); //Penz nullazasa (igen==0 | nem==1)
cColorchat = register_cvar("wpnmenu_colorchat", "1"); //Szines iras ki/be kapcsolasa (ki==0 | be==1)
cCD = register_cvar("wpnmenu_countdown", "1"); //Visszaszamlalo ki/be kapcsolasa (ki==0 | be==1)
register_cvar("wpnmenu_cdvalue", "15"); //Ha wpnmenu_countdown==1 akkor hany masodpercig tartson a visszaszamlalas
cWPlimit = register_cvar("wpnmenu_maxwp", "3"); //Max AWP csapatonkent
cWP = register_cvar("wpnmenu_minplayerwp", "4"); //Mindket csapatban minimum 4 emberenek kell legyen, hogy tudjon AWP-t valasztani
cAdvert = register_cvar("wpnmenu_advert", "180.0"); //Hirdetes (ki==0.0 | milyen idokozonkent 180.0==3 perc
cNade = register_cvar("wpnmenu_nade", "1"); //Kapjon-e a jatekos granatokat (igen==1 | nem==0)
cSmokerank = register_cvar("wpnmenu_smokerank", "180"); //Ha wpnmenu_nade==1 akkor mekkora rank kell, hogy kapjon Smokeot (mindenki kap==0 | TOP180==180)
cFlashrank = register_cvar("wpnmenu_flashrank", "150"); //Ha wpnmenu_nade==1 akkor mekkora rank kell, hogy kapjon Flasht (mindenki kap==0 | TOP150==150)
register_dictionary("weaponmenu.txt");
register_clcmd("say /weapon", "Command");
register_clcmd("team_say /weapon", "Command");
register_clcmd("say /fegyver", "Command");
register_clcmd("team_say /fegyver", "Command");
set_task(get_pcvar_float(cAdvert), "AdvertChck", _, _, _, "b" );
}
public AdvertChck()
{
if(get_pcvar_float(cAdvert) > 0.0 || get_pcvar_num(cEnable))
{
gAdvert? first() : second();
}
}
public first()
{
if(get_pcvar_num(cColorchat))
print_color(0, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ADVERT1", AUTHOR);
else
client_print(0, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ADVERT1", AUTHOR);
gAdvert = false;
}
public second()
{
if(get_pcvar_num(cColorchat))
print_color(0, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ADVERT2");
else
client_print(0, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ADVERT2");
gAdvert = true;
}
public logevent_end()
{
gWPCT = 0;
gWPTE = 0;
new players[32], pnum
get_players(players, pnum)
for(new i=0; i<pnum; i++)
{
gHasPlayerBomb[i] = false;
already[i] = false;
}
}
public fwSpawn(id)
{
if(!get_pcvar_num(cEnable) || get_user_team(id) != 2)
return PLUGIN_CONTINUE;
if(is_user_alive(id))
{
if(get_pcvar_num(cMoney)==0)
cs_set_user_money(id, 0, 0);
if(get_pcvar_num(cCD))
Count[id]=get_cvar_num("wpnmenu_cdvalue");
already[id] = false;
gHasPlayerBomb[id] = false;
bombacheck(id);
cmdWeaponMenu(id)
}
return PLUGIN_CONTINUE;
}
public Command(id)
{
if(!get_pcvar_num(cEnable) || !get_pcvar_num(cCommand) || get_user_team(id) != 2)
return PLUGIN_CONTINUE;
if(get_pcvar_num(cCommandbuyzone) && !cs_get_user_buyzone(id))
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ONLY_BUYZONE");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "ONLY_BUYZONE");
return PLUGIN_HANDLED;
}
if(get_pcvar_num(cCD))
Count[id]=get_cvar_num("wpnmenu_cdvalue");
already[id] = false;
cmdWeaponMenu(id)
return PLUGIN_HANDLED;
}
public ShowWeaponMenu(id)
{
if(!already[id])
{
if(get_pcvar_num(cCD))
{
remove_task(id, 0 )
Count[id]--;
set_task(1.0, "ShowWeaponMenu",id);
}
displayWeaponMenu(id, g_menuPosition[id])
}
}
public cmdWeaponMenu(id)
{
if(!get_pcvar_num(cEnable))
return PLUGIN_HANDLED;
for(new i=0;i<3;i++)
gBadLines[i]=0;
displayWeaponMenu(id, g_menuPosition[id] = 0)
return PLUGIN_HANDLED
}
displayWeaponMenu(id, pos)
{
new Configsdir[64]
new weapon_ini[64]
new line = 0
new g_Lines = 0
new linetext[128], linetextlength
new item_name[64], item_weapon[32]
new menuBody[512]
new b = 0
new start = pos * 8
new len
if(pos==0) gBadLines[pos]=0;
get_customdir(Configsdir, 63)
format(weapon_ini, 63, "%s/weaponmenu.ini", Configsdir)
if ( !file_exists(weapon_ini) )
{
log_to_file("Weaponmenu.log", "%s file nem talalhato!", weapon_ini);
return
}
while ((line = read_file(weapon_ini, line, linetext, 127, linetextlength)))
{
parse(linetext, item_name, 63, item_weapon, 31)
if((linetext[0] != '"' || linetext[0] == ';') || !is_valid(item_weapon))
continue
g_Lines++
}
if(g_Lines > 19)
g_Lines=19;
if (start >= g_Lines)
start = pos = g_menuPosition[id] = 0
if(get_pcvar_num(cCD))
len = format(menuBody, 511, "\w%L \y[\r%d mp\y] \r%d/%d^n\w^n", LANG_PLAYER, "MENU_NAME", Count[id], pos + 1, (g_Lines / 8 + ((g_Lines % 8) ? 1 : 0)))
else
len = format(menuBody, 511, "\w%L \r%d/%d^n\w^n", LANG_PLAYER, "MENU_NAME", pos + 1, (g_Lines / 8 + ((g_Lines % 8) ? 1 : 0)))
new end = start + 8
new keys = MENU_KEY_0
if (end > g_Lines)
end = g_Lines
new players[32], numct, numt
get_players(players, numct, "e", "CT")
get_players(players, numt, "e", "TERRORIST")
for (new a = start+gBadLines[pos]; a < end+gBadLines[pos]; ++a)
{
read_file(weapon_ini, a, linetext, 127, linetextlength)
parse(linetext, item_name, 63, item_weapon, 231)
if((linetext[0] != '"' || linetext[0] == ';') || !is_valid(item_weapon))
{
if(pos==0) gBadLines[pos]++;
continue;
}
if(pos<2)
gBadLines[pos+1]=gBadLines[pos];
keys |= (1<<b)
gLine[b]=a
if(equal(item_weapon, "weapon_awp"))
{
if(numct>=get_pcvar_num(cWP)&& numt>=get_pcvar_num(cWP))
{
if(get_user_team(id) == 2)
{
if((get_pcvar_num(cWPlimit)-gWPCT)==0)
len += format(menuBody[len], 511-len, "\d%d. %s \y[\r%L\y]^n\w", ++b, item_name, LANG_PLAYER, "SOLD_OUT")
else
len += format(menuBody[len], 511-len, "%d. %s \y[\r%d\y]^n\w", ++b, item_name, (get_pcvar_num(cWPlimit)-gWPCT))
}
if(get_user_team(id) == 1)
{
if((get_pcvar_num(cWPlimit)-gWPTE)==0)
len += format(menuBody[len], 511-len, "\d%d. %s \y[\r%L\y]^n\w", ++b, item_name, LANG_PLAYER, "SOLD_OUT")
else
len += format(menuBody[len], 511-len, "%d. %s \y[\r%d\y]^n\w", ++b, item_name, (get_pcvar_num(cWPlimit)-gWPTE))
}
}
else
len += format(menuBody[len], 511-len, "\d%d. %s \y[\r%dv%d\y]^n\w", ++b, item_name, get_pcvar_num(cWP), get_pcvar_num(cWP))
}
else
len += format(menuBody[len], 511-len, "%d. %s^n\w", ++b, item_name)
}
if (end != g_Lines)
{
if(pos>0)
format(menuBody[len], 511-len, "^n9. %L...^n0. %L", LANG_PLAYER, "WPN_NEXT", LANG_PLAYER, "WPN_BACK")
else
format(menuBody[len], 511-len, "^n9. %L...", LANG_PLAYER, "WPN_NEXT")
keys |= MENU_KEY_9
}
else
if(pos>0)
format(menuBody[len], 511-len, "^n0. %L", LANG_PLAYER, "WPN_BACK")
if(!already[id])
{
show_menu(id, keys, menuBody, -1, "Weapon Menu")
if(get_pcvar_num(cCD))
{
if(Count[id]==get_cvar_num("wpnmenu_cdvalue"))
set_task(1.0, "ShowWeaponMenu",id);
if(Count[id]<=0)
{
show_menu(id, 0, menuBody, -1, "Weapon Menu")
already[id] = true;
}
}
}
}
public actionWeaponMenu(id, key)
{
already[id] = true;
switch (key)
{
case 8:
{
already[id] = false;
displayWeaponMenu(id, ++g_menuPosition[id])
}
case 9:
{
already[id] = false;
if(g_menuPosition[id]>0)
displayWeaponMenu(id, --g_menuPosition[id])
else
displayWeaponMenu(id, g_menuPosition[id])
}
default:
{
g_chosenItem[id]=gLine[key]
new Configsdir[64]
new weapon_ini[64]
new linetext[128], linetextlength
new item_name[64], item_weapon[32]
new players[32], numct, numt
get_players(players, numct, "e", "CT")
get_players(players, numt, "e", "TERRORIST")
get_customdir(Configsdir, 63)
format(weapon_ini, 63, "%s/weaponmenu.ini", Configsdir)
read_file(weapon_ini, g_chosenItem[id], linetext, 127, linetextlength)
parse(linetext, item_name, 63, item_weapon, 31)
if(equal(item_weapon, "weapon_awp"))
{
if(numct>=get_pcvar_num(cWP)&& numt>=get_pcvar_num(cWP))
{
if(get_user_team(id) == 2 && get_pcvar_num(cWPlimit)==gWPCT)
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WPTEAM");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WPTEAM");
already[id] = false;
displayWeaponMenu(id, g_menuPosition[id])
return PLUGIN_HANDLED;
}
else if(get_user_team(id) == 1 && get_pcvar_num(cWPlimit)==gWPTE)
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WPTEAM");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WPTEAM");
already[id] = false;
displayWeaponMenu(id, g_menuPosition[id])
return PLUGIN_HANDLED;
}
else
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GOT_WEAPON");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GOT_WEAPON");
give_item(id, item_weapon)
if(is_sec_wpn(givesec()))
{
give_item(id, givesec())
cs_set_user_bpammo(id, weapon_to_csw(givesec()), 100);
}
cs_set_user_bpammo(id, weapon_to_csw(item_weapon), 100);
give_item(id, "item_kevlar");
cs_set_user_defuse(id, 1)
if(get_user_team(id) == 2) gWPCT++;
if(get_user_team(id) == 1) gWPTE++;
return PLUGIN_HANDLED;
}
}
else
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WP", get_pcvar_num(cWP), get_pcvar_num(cWP));
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "MAX_WP", get_pcvar_num(cWP), get_pcvar_num(cWP));
already[id] = false;
displayWeaponMenu(id, g_menuPosition[id])
return PLUGIN_HANDLED;
}
}
if(equal(item_weapon, "none"))
{
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "WPN_NONE");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "WPN_NONE");
return PLUGIN_HANDLED;
}
if(get_pcvar_num(cNade))
GiveNade(id)
give_item(id, item_weapon)
if(is_sec_wpn(givesec()))
{
give_item(id, givesec())
cs_set_user_bpammo(id, weapon_to_csw(givesec()), 100);
}
cs_set_user_bpammo(id, weapon_to_csw(item_weapon), 100);
give_item(id, "item_kevlar");
cs_set_user_defuse(id, 1)
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GOT_WEAPON");
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GOT_WEAPON");
}
}
return PLUGIN_HANDLED
}
public givesec()
{
new returnvalue[15];
new cvarvalue[10];
get_pcvar_string(cSecond, cvarvalue, 9);
format(returnvalue, 14, "weapon_%s", cvarvalue);
return returnvalue;
}
public bombacheck(id)
{
if(user_has_weapon(id, CSW_C4))
gHasPlayerBomb[id] = true;
strip_user_weapons(id);
if(gHasPlayerBomb[id] == true)
{
give_item(id, "weapon_c4");
cs_set_user_plant(id, 1, 1);
}
give_item(id, "weapon_knife");
}
public GiveNade(id)
{
give_item(id, "weapon_hegrenade");
if(get_pcvar_num(cFlashrank)==0)
{
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
}
if(get_pcvar_num(cSmokerank)==0)
give_item(id, "weapon_smokegrenade");
if(get_pcvar_num(cFlashrank) && get_pcvar_num(cSmokerank))
{
static stats[8], body[8];
new rank_pos = get_user_stats(id, stats, body);
if(rank_pos<=get_pcvar_num(cFlashrank))
{
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GIVE_FLASH", get_pcvar_num(cFlashrank));
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GIVE_FLASH", get_pcvar_num(cFlashrank));
}
if(rank_pos<=get_pcvar_num(cSmokerank))
{
give_item(id, "weapon_smokegrenade")
if(get_pcvar_num(cColorchat))
print_color(id, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GIVE_SMOKE", get_pcvar_num(cSmokerank));
else
client_print(id, print_chat, "%L %L", LANG_PLAYER, "PREFIX", LANG_PLAYER, "GIVE_SMOKE", get_pcvar_num(cSmokerank));
}
}
}
public bomb_is_dropped()
{
new player = get_loguser_index();
gHasPlayerBomb[player] = false;
}
stock get_loguser_index()
{
new loguser[80], name[32];
read_logargv(0, loguser, 79);
parse_loguser(loguser, name, 31);
return get_user_index(name);
}
public is_sec_wpn(weapon[])
{
if(equal(weapon, "weapon_deagle")
|| equal(weapon, "weapon_elite")
|| equal(weapon, "weapon_fiveseven")
|| equal(weapon, "weapon_glock18")
|| equal(weapon, "weapon_p228")
|| equal(weapon, "weapon_usp"))
return 1;
return 0;
}
public weapon_to_csw(weapon[])
{
if(equal(weapon, "weapon_m4a1"))
return CSW_M4A1;
else if(equal(weapon, "weapon_ak47"))
return CSW_AK47;
else if(equal(weapon, "weapon_awp"))
return CSW_AWP;
else if(equal(weapon, "weapon_famas"))
return CSW_FAMAS;
else if(equal(weapon, "weapon_aug"))
return CSW_AUG;
else if(equal(weapon, "weapon_g3sg1"))
return CSW_G3SG1;
else if(equal(weapon, "weapon_galil"))
return CSW_GALIL;
else if(equal(weapon, "weapon_m249"))
return CSW_M249;
else if(equal(weapon, "weapon_m3"))
return CSW_M3;
else if(equal(weapon, "weapon_mac10"))
return CSW_MAC10;
else if(equal(weapon, "weapon_mp5navy"))
return CSW_MP5NAVY;
else if(equal(weapon, "weapon_p90"))
return CSW_P90;
else if(equal(weapon, "weapon_scout"))
return CSW_SCOUT;
else if(equal(weapon, "weapon_sg550"))
return CSW_SG550;
else if(equal(weapon, "weapon_sg552"))
return CSW_SG552;
else if(equal(weapon, "weapon_tmp"))
return CSW_TMP;
else if(equal(weapon, "weapon_ump45"))
return CSW_UMP45;
else if(equal(weapon, "weapon_xm1014"))
return CSW_XM1014;
else if(equal(weapon, "weapon_deagle"))
return CSW_DEAGLE;
else if(equal(weapon, "weapon_elite"))
return CSW_ELITE;
else if(equal(weapon, "weapon_fiveseven"))
return CSW_FIVESEVEN;
else if(equal(weapon, "weapon_glock18"))
return CSW_GLOCK18;
else if(equal(weapon, "weapon_p228"))
return CSW_P228;
else if(equal(weapon, "weapon_usp"))
return CSW_USP;
else if(equal(weapon, "none"))
return 1;
return -1;
}
public is_valid(weapon[])
{
if(equal(weapon, "weapon_m4a1")
|| equal(weapon, "weapon_ak47")
|| equal(weapon, "weapon_awp")
|| equal(weapon, "weapon_famas")
|| equal(weapon, "weapon_aug")
|| equal(weapon, "weapon_g3sg1")
|| equal(weapon, "weapon_galil")
|| equal(weapon, "weapon_m249")
|| equal(weapon, "weapon_m3")
|| equal(weapon, "weapon_mac10")
|| equal(weapon, "weapon_mp5navy")
|| equal(weapon, "weapon_p90")
|| equal(weapon, "weapon_scout")
|| equal(weapon, "weapon_sg550")
|| equal(weapon, "weapon_sg552")
|| equal(weapon, "weapon_tmp")
|| equal(weapon, "weapon_ump45")
|| equal(weapon, "weapon_xm1014")
|| equal(weapon, "none"))
return 1;
return 0;
}
stock print_color(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
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, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
return PLUGIN_HANDLED
}