#include < amxmodx >
 #include < amxmisc >
 #include < fun >
 #include < fakemeta >
 #include < cstrike >
 #include < hamsandwich >
 #include < colorchat >
 
 #pragma semicolon 1
 
 #define VERSION "0.0.1"
 
 #define Max_Players 32
 
 #define OFFSET_PRIMARYWEAPON 116
 #define OFFSET_C4_SLOT 372
 
 #define Weapon_Menu_Name "Fegyver Csomagok"
 
 #define Next_Button "KövetkezĹ‘"
 #define Back_Button "Vissza"
 #define Exit_Button "KilĂ©pĂ©s"
 
 #define Money_Hud ( 1 << 5 )
 
 new g_iWPCT;
 new g_iWPTE;
 
 new pCvarMaxCTWps;
 new pCvarMaxTEWps;
 
 new pCvarWPBlock;
 
 new pCvarFlash;
 new pCvarHe;
 new pCvarSmoke;
 
 new pCvarKevlar;
 new pCvarDefuser;
 
 new pCvarPrefix;
 new pCvarMoney;
 new pCvarBlockBuy;
 new pCvarUnAmmo;
 new pCvarweapnew;
 
 new const g_szMessages [ ] [ ] =
 {
 "",
 "^1CsapatonkĂ©nt csak kĂ©t ember AWP-zhet!",
 "^4%s ^1AWP csak ^44v4-tĹ‘l ^1használhatĂł!",
 "^1A vásárlás letĂltva!",
 "^1Te már választottál fegyvert!"
 };
 
 new const g_szWeaponMenuNames [ ] [ ] = {
 
 "M4A1 Csomag",
 "AK47 Csomag",
 "AWP Csomag",
 "M249 Csomag",
 "AUG Csomag",
 "Famas Csomag",
 "Galil Csomag",
 "MP5 Csomag",
 "XM1014 Csomag",
 "M3 Csomag",
 "Scout Csomag"
 };
 
 new const g_szWeaponsName [ ] [ ] = {
 
 "weapon_m4a1",
 "weapon_ak47",
 "weapon_awp",
 "weapon_m249",
 "weapon_aug",
 "weapon_famas",
 "weapon_galil",
 "weapon_mp5navy",
 "weapon_xm1014",
 "weapon_m3",
 "weapon_scout"
 };
 
 new const g_szPistolName [ ] = "weapon_deagle";
 
 const DoNotReload = ( ( 1 << CSW_HEGRENADE ) | ( 1 << CSW_SMOKEGRENADE ) | ( 1 << CSW_FLASHBANG ) | ( 1 << CSW_KNIFE ) | ( 1 << CSW_C4 ) );
 new const maxAmmo[ 31 ] = {
 
 0,
 52,
 0,
 90,
 1,
 32,
 1,
 100,
 90,
 1,
 120,
 100,
 100,
 90,
 90,
 90,
 100,
 120,
 30,
 120,
 200,
 32,
 90,
 120,
 90,
 2,
 35,
 90,
 90,
 0,
 100
 };
 
 new g_szBuyCommands[ ][ ] =
 {
 "usp", "glock", "deagle", "p228", "elites", "fn57", "m3", "xm1014", "mp5", "tmp", "p90", "mac10", "ump45", "ak47",
 "galil", "famas", "sg552", "m4a1", "aug", "scout", "awp", "g3sg1", "sg550", "m249", "vest", "vesthelm", "flash", "hegren",
 "sgren", "defuser", "nvgs", "shield", "primammo", "secammo", "km45", "9x19mm", "nighthawk", "228compact", "12gauge",
 "autoshotgun", "smg", "mp", "c90", "cv47", "defender", "clarion", "krieg552", "bullpup", "magnum", "d3au1", "krieg550",
 "buyammo1", "buyammo2"
 };
 
 new const g_szMenuCommands[ ] [ ] =
 {
 "say /fegyver",
 "say_team /fegyver"
 
 };
 
 new g_szChatPrefix[ 64 ];
 new g_msgHideWeapon;
 new g_bHasWeapon[ Max_Players ];
 
 public plugin_init ( ) {
 
 register_plugin( "Advanced Weapon Menu", VERSION, "#YouCantStopMe" );
 
 RegisterHam( Ham_Spawn, "player", "func_OpenWeaponMenu", 1 );
 
 pCvarMaxCTWps = register_cvar( "awm_max_ct_awp", "2" ); // Ct-nél 2 AWP-s lehet.
 pCvarMaxTEWps = register_cvar( "awm_max_te_awp", "2" ); // Terroristáknál 2 AWP-s lehet.
 
 pCvarWPBlock = register_cvar( "awm_allow_wp_player", "4" ); // Ha mindkét csapatban van 4-4 játékos akkor engedi az AWP-t
 
 pCvarFlash = register_cvar( "awm_give_flash", "2" ); // Itt tudod beállítani ,hogy adjon-e füst gránátot. ( 0 = Nem ad ) Alap: 2 Flash gránát
 pCvarHe = register_cvar( "awm_give_he", "1" ); // Itt tudod beállítani ,hogy adjon-e füst gránátot. ( 0 = Nem ad ) Alap: 1 Robanó gránát
 pCvarSmoke = register_cvar( "awm_give_smoke", "0" ); // Itt tudod beállítani ,hogy adjon-e füst gránátot. ( 0 = Nem ad )
 
 pCvarKevlar = register_cvar( "awm_give_kevlar", "2" ); // Itt tudod beállítani ,hogy adjon-e kevlárt. ( 0 = Nem Ad ) Alap: 2 ( Kevlár + Sisak )
 pCvarDefuser = register_cvar( "awm_give_defuser", "1" ); // Itt tudod beállítani ,hogy adjon-e defusert. ( 0 = Nem Ad )
 
 pCvarUnAmmo = register_cvar( "awm_unlimited_ammo", "1" ); // Itt tudod beállítani ,hogy elfoggyon-e a tár vagy ne. Alap: 1 ( Tehát nem fogy el a tár )
 
 pCvarBlockBuy = register_cvar( "awm_block_buy", "1" ); // Itt tudod beállítani ,hogy tiltsa-e a vásárlást vagy ne. Alap 1 ( Tehát tiltva van ) ( 0 = Nincs tiltva )
 pCvarMoney = register_cvar( "awm_set_money", "0" ); // Itt tudod beállítani ,hogy mennyi pénze legyen a játékosoknak. ( 0 = Nincs , eltűnik a hudról is ) Alap: 0
 pCvarPrefix = register_cvar( "awm_prefix", "SzerverPrefix" ); // Itt tudod beállítani, hogy mi legyen a Fegyvermenü prefix-je.
 
 pCvarweapnew = register_cvar( "awm_ujfegyver", "1");
 
 g_msgHideWeapon = get_user_msgid( "HideWeapon" );
 
 for( new i = 0; i < sizeof( g_szBuyCommands ); i++ )
 register_clcmd( g_szBuyCommands[ i ], "cmd_BlockBuy" );
 
 for( new i = 0; i < sizeof( g_szMenuCommands ); i++ )
 register_clcmd( g_szMenuCommands[ i ], "cmd_ShowWeaponMenu" );
 
 register_event( "ResetHUD", "onResetHUD", "b" );
 register_event( "CurWeapon", "eCurWeapon", "be", "1=1" );
 
 register_message( g_msgHideWeapon, "msgHideWeapon" );
 
 register_logevent( "eRoundEnd", 2, "1=Round_End" );
 }
 
 public client_connect( iClient ) {
 
 g_bHasWeapon[ iClient ] = false;
 }
 
 public client_disconnect( iClient ) {
 
 g_bHasWeapon[ iClient ] = false;
 }
 
 public cmd_ShowWeaponMenu( iClient ) {
 
 if( !get_pcvar_num(pCvarweapnew) ) {
 switch( g_bHasWeapon[ iClient ] ) {
 
 case true:
 {
 get_pcvar_string( pCvarPrefix, g_szChatPrefix, charsmax( g_szChatPrefix ) );
 client_print_color( iClient, Red, "^3%s %s" , g_szChatPrefix, g_szMessages[ 4 ] );
 
 return PLUGIN_HANDLED;
 }
 case false: func_OpenWeaponMenu( iClient );
 }
 }
 else {
 func_OpenWeaponMenu( iClient );
 }
 return PLUGIN_HANDLED;
 }
 
 public cmd_BlockBuy( iClient ) {
 
 if( !get_pcvar_num( pCvarBlockBuy ) )
 return PLUGIN_CONTINUE;
 
 get_pcvar_string( pCvarPrefix, g_szChatPrefix, charsmax( g_szChatPrefix ) );
 client_print_color( iClient, Red, "^3%s %s" , g_szChatPrefix, g_szMessages[ 3 ] );
 return PLUGIN_HANDLED;
 }
 
 public eCurWeapon( iClient ) {
 
 if( get_pcvar_num( pCvarUnAmmo ) ) {
 
 if( is_user_alive( iClient ) ) {
 
 new weapon = read_data( 2 );
 if( !( DoNotReload & ( 1 << weapon ) ) ) {
 
 cs_set_user_bpammo( iClient, weapon, maxAmmo[ weapon ] );
 }
 }
 }
 }
 
 public onResetHUD( iClient ) {
 
 if( !get_pcvar_num( pCvarMoney ) ) {
 
 message_begin( MSG_ONE, g_msgHideWeapon, _, iClient );
 write_byte( Money_Hud );
 message_end( );
 }
 }
 
 public msgHideWeapon( ) {
 
 if( !get_pcvar_num( pCvarMoney ) ) {
 
 set_msg_arg_int( 1, ARG_BYTE, get_msg_arg_int( 1 ) | Money_Hud );
 }
 }
 
 public eRoundEnd ( ) {
 
 g_iWPCT = 0;
 g_iWPTE = 0;
 }
 
 public func_OpenWeaponMenu ( iClient ) {
 
 if( !is_user_alive( iClient ) )
 return;
 
 cs_set_user_money( iClient, get_pcvar_num( pCvarMoney ) );
 
 get_pcvar_string( pCvarPrefix, g_szChatPrefix, charsmax( g_szChatPrefix ) );
 
 g_bHasWeapon[ iClient ] = false;
 
 new szMenuTitle[ 121 ];
 new szMenuItem[ 121 ];
 
 format( szMenuTitle, charsmax( szMenuTitle ), "\r%s^n\w%s", g_szChatPrefix, Weapon_Menu_Name );
 
 StripUserWeapons( iClient );
 new menu = menu_create( szMenuTitle, "func_OpenWeaponMenu_handler" );
 
 for( new i = 0; i < sizeof( g_szWeaponMenuNames ); i++ ) {
 
 if( i != 2 ) {
 
 format( szMenuItem, charsmax( szMenuItem ), "\w%s", g_szWeaponMenuNames[ i ] );
 }
 else {
 switch( get_user_team( iClient ) )
 {
 case 1: format( szMenuItem, charsmax( szMenuItem ), "\w%s \y[ElsĹ‘ %d embernek]", g_szWeaponMenuNames[ i ], get_pcvar_num( pCvarMaxTEWps ) );
 case 2: format( szMenuItem, charsmax( szMenuItem ), "\w%s \y[ElsĹ‘ %d embernek]", g_szWeaponMenuNames[ i ], get_pcvar_num( pCvarMaxCTWps ) );
 default: continue;
 }
 }
 
 menu_additem( menu, szMenuItem, _, 0 );
 }
 
 menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
 menu_setprop( menu, MPROP_BACKNAME, Back_Button );
 menu_setprop( menu, MPROP_NEXTNAME, Next_Button );
 menu_setprop( menu, MPROP_EXITNAME, Exit_Button );
 menu_display( iClient, menu );
 }
 
 public func_OpenWeaponMenu_handler( iClient, iMenu, iItem ) {
 
 if( iItem == MENU_EXIT ) {
 
 menu_destroy( iMenu );
 return PLUGIN_HANDLED;
 }
 
 new data[ 6 ], szName[ 64 ];
 new access, callback;
 menu_item_getinfo( iMenu, iItem, access, data, charsmax( data ), szName, charsmax( szName ), callback );
 
 get_pcvar_string( pCvarPrefix, g_szChatPrefix, charsmax( g_szChatPrefix ) );
 
 if( iItem != 2 ) {
 
 give_item( iClient, g_szWeaponsName[ iItem ] );
 give_item( iClient, g_szPistolName );
 
client_print_color( iClient, Red, "^4%s ^1Te az ^4%sot ^1választottad!", g_szChatPrefix, g_szWeaponMenuNames[ iItem ] );
 }
 else {
 
 new iTeams[ CsTeams ];
 GetPlayerCount( iTeams );
 
 if( iTeams[ CS_TEAM_T ] < get_pcvar_num( pCvarWPBlock )
 || iTeams[ CS_TEAM_CT ] < get_pcvar_num( pCvarWPBlock ) ) {
 
 client_print_color( iClient, Red, g_szMessages[ 2 ], g_szChatPrefix );
 func_OpenWeaponMenu( iClient );
 
 return PLUGIN_HANDLED;
 }
 
 new CsTeams:userTeam = cs_get_user_team( iClient );
 if( userTeam == CS_TEAM_CT ) {
 
 if( g_iWPCT < get_pcvar_num( pCvarMaxCTWps ) ) {
 
 give_item( iClient, g_szWeaponsName[ iItem ] );
 give_item( iClient, g_szPistolName );
 
client_print_color( iClient, Red, "^4%s ^1Te az ^4%sot ^1választottad!", g_szChatPrefix, g_szWeaponMenuNames[ iItem ] );
 g_iWPCT++;
 }
 else {
 
 client_print( iClient, print_center, g_szMessages[ 1 ] );
 func_OpenWeaponMenu ( iClient );
 
 return PLUGIN_HANDLED;
 }
 }
 
 if( userTeam == CS_TEAM_T ) {
 
 if( g_iWPTE < get_pcvar_num( pCvarMaxTEWps ) ) {
 
 
 give_item( iClient, g_szWeaponsName[ iItem ] );
 give_item( iClient, g_szPistolName );
 
client_print_color( iClient, Red, "^4%s ^1Te az ^4%sot ^1választottad!", g_szChatPrefix, g_szWeaponMenuNames[ iItem ] );
 g_iWPTE++;
 }
 else {
 
 client_print( iClient, print_center, g_szMessages[ 1 ] );
 func_OpenWeaponMenu( iClient );
 
 return PLUGIN_HANDLED;
 }
 }
 }
 
 give_item( iClient, "weapon_knife" );
 give_player_stuff( iClient );
 
 menu_destroy( iMenu );
 return PLUGIN_HANDLED;
 }
 
 GetPlayerCount( iTeamPlayers[ CsTeams ] ) {
 
 new iPlayers[ 32 ] , iPlayerCount;
 
 get_players( iPlayers , iPlayerCount );
 
 for ( new i = 0 ; i < iPlayerCount ; i++ )
 iTeamPlayers[ cs_get_user_team( iPlayers[ i ] ) ]++;
 }
 
 stock give_player_stuff( iClient ) {
 
 if( get_pcvar_num( pCvarFlash ) ) {
 
 give_item( iClient, "weapon_flashbang" );
 cs_set_user_bpammo( iClient, CSW_FLASHBANG, get_pcvar_num( pCvarFlash ) );
 }
 
 if( get_pcvar_num( pCvarHe ) ) {
 
 give_item( iClient, "weapon_hegrenade" );
 cs_set_user_bpammo( iClient, CSW_HEGRENADE, get_pcvar_num( pCvarHe ) );
 }
 
 if( get_pcvar_num( pCvarSmoke ) ) {
 
 give_item( iClient, "weapon_smokegrenade" );
 cs_set_user_bpammo( iClient, CSW_SMOKEGRENADE, get_pcvar_num( pCvarSmoke ) );
 }
 
 if( get_pcvar_num( pCvarKevlar ) ) {
 
 switch( get_pcvar_num( pCvarKevlar ) ) {
 
 case 1: give_item( iClient, "item_kevlar" );
 case 2: give_item( iClient, "item_assaultsuit" );
 default: return PLUGIN_CONTINUE;
 }
 }
 
 if( get_pcvar_num( pCvarDefuser ) ) {
 
 give_item( iClient, "item_thighpack" );
 }
 
 if( !get_pcvar_num( pCvarUnAmmo ) ) {
 
 new weapons[ 32 ];
 new weaponsnum;
 get_user_weapons( iClient, weapons, weaponsnum );
 for( new i = 0; i < weaponsnum; i++ )
 if( is_user_alive( iClient ) )
 if( maxAmmo[ weapons[ i ] ] > 0 )
 cs_set_user_bpammo( iClient, weapons[ i ], maxAmmo[ weapons[ i ] ] );
 }
 
 g_bHasWeapon[ iClient ] = true;
 return PLUGIN_CONTINUE;
 }
 
 
 //Stolen from CSDM Weapon Menu
 stock StripUserWeapons( iClient ) {
 
 new iC4Ent = get_pdata_cbase( iClient, OFFSET_C4_SLOT );
 
 if( iC4Ent > 0 ) {
 
 set_pdata_cbase( iClient, OFFSET_C4_SLOT, FM_NULLENT );
 }
 
 strip_user_weapons( iClient );
 set_pdata_int( iClient, OFFSET_PRIMARYWEAPON, 0 );
 
 if( iC4Ent > 0 ) {
 
 set_pev( iClient, pev_weapons, pev( iClient, pev_weapons ) | ( 1 << CSW_C4 ) );
 set_pdata_cbase( iClient, OFFSET_C4_SLOT, iC4Ent );
 
 cs_set_user_bpammo( iClient, CSW_C4, 1 );
 cs_set_user_plant( iClient, 1 );
 }
 
 return PLUGIN_HANDLED;
 }