#include < amxmodx >
    #include < amxmisc >
    #include < fun >
    #include < fakemeta >
    #include < cstrike >
    #include < hamsandwich >
 
    #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 "Valassz Fegyvert"
 
    #define Next_Button "Kovetkezo"
    #define Back_Button "Vissza"
    #define Exit_Button "Kilepes"
 
    #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 const g_szMessages [ ] [ ] =
    {
    "",
    "Csapatonkent csak ket ember AWP-zhet",
    "^3%s^1 ~ ^4AWP^1 csak^4 3v3^1-tol hasznalhato!",
    "^3%s^1 ~ A ^1vasarlas ^4letiltva^1!",
    "^3%s^1 ~ Te mar ^4valasztottal ^1fegyvert!"
    };
 
    new const g_szWeaponMenuNames [ ] [ ] = {
 
    "\yM4A1 \rCsomag",
    "\yAK47 \rCsomag",
    "\yAWP \rCsomag",
    "\yM249 \rCsomag",
    "\yAUG \rCsomag",
    "\yFamas \rCsomag",
    "\yGalil \rCsomag",
    "\yMP5 \rCsomag",
    "\yXM1014 \rCsomag",
    "\yM3 \rCsomag",
    "\yScout \rCsomag"
    };
 
    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 /fegyo",
    "say_team /fegyo",
 
    "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", "3" ); // Ct-n?l 2 AWP-s lehet.
    pCvarMaxTEWps = register_cvar( "awm_max_te_awp", "3" ); // Terrorist?kn?l 2 AWP-s lehet.
 
    pCvarWPBlock = register_cvar( "awm_allow_wp_player", "0" ); // 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", "0" ); // 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", "MOGYORO only dust2" ); // Itt tudod be?ll?tani, hogy mi legyen a Fegyvermen? prefix-je.
 
    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 ) {
 
    switch( g_bHasWeapon[ iClient ] ) {
 
    case true:
    {
    get_pcvar_string( pCvarPrefix, g_szChatPrefix, charsmax( g_szChatPrefix ) );
    ColorChat( iClient, "^3%s %s" , g_szChatPrefix, g_szMessages[ 4 ] );
 
    return PLUGIN_HANDLED;
    }
    case false: 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 ) );
    ColorChat( iClient, "^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[Elso %d embernek]", g_szWeaponMenuNames[ i ], get_pcvar_num( pCvarMaxTEWps ) );
    case 2: format( szMenuItem, charsmax( szMenuItem ), "\w%s \y[Elso %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 );
 
    ColorChat( iClient, "^3%s^1 ~ Tessek egy *->^4%s^1<-* !", 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 ) ) {
 
    ColorChat( iClient, 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 );
 
    ColorChat( iClient, "^3%s^1 ~ Tessek egy *->^4%s^1<-* !", 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 );
 
    ColorChat( iClient, "^3%s^1 ~ Tessek egy *->^4%s^1<-* !", 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;
    }
 
    stock ColorChat( iClient, const input[], any:...)
    {
    new count = 1, players[ 32 ];
    static msg[ 191 ];
    vformat( msg, 190, input, 3 );
 
    replace_all( msg, 190, "^x01" , "^1");
    replace_all( msg, 190, "^x03" , "^3");
    replace_all( msg, 190, "^x04" , "^4");
 
    if ( iClient ) players[ 0 ] = iClient; 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( );
    }
    }
    }
    }