- /* 
-             Extended Weapon Menu 
-                 v1.4 by mforce 
-         
-         Changes: 
-         
-         v1.1 - Multilang added, strip_user_weapons fixed, "hardcoded" things fixed, 
-         unnecessary cvar removed, using Safety1st method for money block, ColorChat included. 
-         
-         v1.2 - AMXX 1.8.3 support fixed, minimal improvements (less cvar hook) 
-         v1.21 - Multilang fix. 
-         v1.3 - Plugin pause removed. Added files for modify weapon menu items. 
-         v1.4 - Added give and drop by Safety1st, menu builds by Vaqtincha's plugin. 
-     */ 
-       
-       
-     #include <amxmodx> 
-     #include <reapi> 
-       
-     new const PLUGIN[] = "[ReApi] Extended Weapon Menu"; 
-     new const VERSION[] = "1.4"; 
-     new const AUTHOR[] = "mforce"; 
-       
-       
-     new const PREFIX[] = "^4[EWM]"; 
-       
-     #if AMXX_VERSION_NUM < 183 
-     #include <colorchat> 
-     const MAX_PLAYERS = 32; 
-     #endif 
-     const HUD_HIDE_MONEY = 1<<5; 
-       
-     new Array:g_Primary_MenuItems, Array:g_Secondary_MenuItems; 
-     new g_iPrim_TotalItems, g_iSec_TotalItems; 
-     new g_iPrim_EquipMenuID, g_iSec_EquipMenuID; 
-     enum _:weapinfo {weap_name[32], bpammo}; 
-     enum _:PCVARS {AwpMinPlayers, MaxAwps, PistolMenu, MaxHeg, MaxFlash, MaxSmoke} 
-     enum _:TEAMS {TE, CT}; 
-     enum _:MAXGRENADES {HE, FLASH, SMOKE}; 
-     enum _:AWPCVARS {MinPlayers, MaxAwp}; 
-     new g_Cvars[PCVARS], bool:g_AllowAWP, g_Awps[TEAMS], bool:g_Used[MAX_PLAYERS+1], g_Grenades[MAXGRENADES], g_AWPCvarHook[AWPCVARS]; 
-       
-       
-     new const g_szWeaponNames[CSW_P90+1][] = { 
-         "","weapon_p228","weapon_shield","weapon_scout","weapon_hegrenade","weapon_xm1014","weapon_c4", 
-         "weapon_mac10","weapon_aug","weapon_smokegrenade","weapon_elite","weapon_fiveseven","weapon_ump45", 
-         "weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp", 
-         "weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1", 
-         "weapon_flashbang","weapon_deagle","weapon_sg552","weapon_ak47","weapon_knife","weapon_p90" 
-     } 
-       
-     public plugin_init() { 
-         register_plugin(PLUGIN, VERSION, AUTHOR); 
-         register_dictionary("extended_weapon_menu.txt"); 
-         g_Cvars[AwpMinPlayers] = register_cvar("ewm_awpminplayers", "4") 
-         g_Cvars[MaxAwps] = register_cvar("ewm_maxawp", "3") 
-         g_Cvars[PistolMenu] = register_cvar("ewm_pistolmenu", "0") 
-         g_Cvars[MaxHeg] = register_cvar("ewm_maxheg", "1") 
-         g_Cvars[MaxFlash] = register_cvar("ewm_maxflash", "2") 
-         g_Cvars[MaxSmoke] = register_cvar("ewm_maxsmoke", "1") 
-         RegisterHookChain(RG_CBasePlayer_Spawn, "weapmenu", true); 
-         register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0"); 
-         
-         new const commands[][] = {"say /gun", "say /guns", "say /weap", "say_team /gun", "say_team /guns", "say_team /weap"}; 
-         for(new i; i < sizeof(commands); i++) { 
-             register_clcmd(commands[i], "weapmenu"); 
-         } 
-         
-         set_member_game(m_bMapHasBuyZone, false); 
-         register_event("ResetHUD", "Event_ResetHUD", "b") 
-         register_event("HideWeapon", "Event_HideWeapon", "b") 
-         set_msg_block(get_user_msgid("Money"), BLOCK_SET) 
-         
-         g_Primary_MenuItems = ArrayCreate(weapinfo); 
-         g_Secondary_MenuItems = ArrayCreate(weapinfo); 
-     } 
-       
-     public plugin_cfg() { 
-         new sBuffer[256], sFile[128], sData[2][32], pFile; 
-         get_localinfo("amxx_configsdir", sFile, charsmax(sFile)); 
-         add(sFile, charsmax(sFile), "/ewm_weapons.ini"); 
-       
-         pFile = fopen(sFile, "rt"); 
-         if(!pFile) set_fail_state("Error reading weapon menu items config file."); 
-         
-         new Trie:tCheckWeaponName = TrieCreate(); 
-         new Trie:tCheckAddedItems = TrieCreate() 
-         
-         for(new i = 0; i< sizeof(g_szWeaponNames); i++) 
-             TrieSetCell(tCheckWeaponName, g_szWeaponNames[i], 1); 
-         
-         new bSection, menudata[weapinfo]; 
-         
-         while(!feof(pFile)) { 
-             fgets(pFile, sBuffer, charsmax(sBuffer)); trim(sBuffer); 
-             if(!sBuffer[0] || sBuffer[0] == ';' || sBuffer[0] == '#') continue; 
-             
-             if(sBuffer[0] == '[') { 
-                 if(equali(sBuffer, "[weapons]")) bSection = 1; 
-                 else if(equali(sBuffer, "[pistols]")) bSection = 2; 
-                 else bSection = 0; 
-                 
-                 continue; 
-             } 
-       
-             if(parse(sBuffer, sData[0], charsmax(sData[]), sData[1], charsmax(sData[]))) { 
-                 format(sData[0], charsmax(sData[]), "weapon_%s", sData[0]); 
-                 strtolower(sData[0]); 
-                 
-                 if(!sData[0][0] || !TrieKeyExists(tCheckWeaponName, sData[0])) { 
-                     server_print("WARNING: Invalid weapon name ^"%s^" will be skipped!", sData[0]); 
-                     continue; 
-                 } 
-                 if(TrieKeyExists(tCheckAddedItems, sData[0])) { 
-                     server_print("WARNING: Item ^"%s^" is already added!", sData[0]); 
-                     continue; 
-                 } 
-                 
-                 copy(menudata[weap_name], charsmax(menudata[weap_name]), sData[0]); 
-                 menudata[bpammo] = str_to_num(sData[1]); 
-                 TrieSetCell(tCheckAddedItems, sData[0], 1); 
-                 
-                 if(bSection == 1) { 
-                     ArrayPushArray(g_Primary_MenuItems, menudata); 
-                     g_iPrim_TotalItems++ 
-                 } 
-                 else if(bSection == 2) { 
-                     ArrayPushArray(g_Secondary_MenuItems, menudata); 
-                     g_iSec_TotalItems++ 
-                 } 
-             } 
-         } 
-         
-         fclose(pFile); 
-         TrieDestroy(tCheckWeaponName); 
-         TrieDestroy(tCheckAddedItems); 
-         
-         if(!g_iPrim_TotalItems || !g_iSec_TotalItems) set_fail_state("Error! The menu doesn't contain any weapons."); 
-         
-         build_menu(); 
-     } 
-       
-     build_menu() { 
-         g_iPrim_EquipMenuID = menu_create(PLUGIN, "Prim_WeaponMenuHandler") 
-         g_iSec_EquipMenuID = menu_create(PLUGIN, "Sec_WeaponMenuHandler") 
-         // menu_setprop(g_iPrim_EquipMenuID, MPROP_NUMBER_COLOR, "\r") 
-       
-         new szMenuText[64], menudata[weapinfo], szNum[3], i; 
-         
-         for(i = 0; i < g_iPrim_TotalItems; i++) { 
-             ArrayGetArray(g_Primary_MenuItems, i, menudata) 
-             strtoupper(menudata[weap_name]); 
-             formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]); 
-             num_to_str(i, szNum, charsmax(szNum)) 
-             menu_additem(g_iPrim_EquipMenuID, szMenuText, szNum, 0) 
-         } 
-         
-         for(i = 0; i < g_iSec_TotalItems; i++) { 
-             ArrayGetArray(g_Secondary_MenuItems, i, menudata) 
-             strtoupper(menudata[weap_name]); 
-             formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]); 
-             num_to_str(i, szNum, charsmax(szNum)) 
-             menu_additem(g_iSec_EquipMenuID, szMenuText, szNum, 0) 
-         } 
-         
-         menu_setprop(g_iPrim_EquipMenuID, MPROP_EXIT, MEXIT_ALL); 
-         menu_setprop(g_iSec_EquipMenuID, MPROP_EXIT, MEXIT_ALL); 
-         formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_BACK"); 
-         menu_setprop(g_iPrim_EquipMenuID, MPROP_BACKNAME, szMenuText); 
-         menu_setprop(g_iSec_EquipMenuID, MPROP_BACKNAME, szMenuText); 
-         formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_NEXT"); 
-         menu_setprop(g_iPrim_EquipMenuID, MPROP_NEXTNAME, szMenuText); 
-         menu_setprop(g_iSec_EquipMenuID, MPROP_NEXTNAME, szMenuText); 
-         formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_EXIT"); 
-         menu_setprop(g_iPrim_EquipMenuID, MPROP_EXITNAME, szMenuText); 
-         menu_setprop(g_iSec_EquipMenuID, MPROP_EXITNAME, szMenuText); 
-     } 
-       
-     public Prim_WeaponMenuHandler(id, iMenu, iItem) { 
-         if(iItem == MENU_EXIT) return PLUGIN_HANDLED; 
-       
-         new szNum[3], iAccess, cb; 
-         menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb); 
-       
-         new iItemIndex = str_to_num(szNum); 
-         new menudata[weapinfo]; 
-         
-         ArrayGetArray(g_Primary_MenuItems, iItemIndex, menudata); 
-         
-         if(equal(menudata[weap_name], "weapon_awp")) { 
-             if(!g_AllowAWP) { 
-                 client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_ALLOWFROM", g_AWPCvarHook[MinPlayers], g_AWPCvarHook[MinPlayers]); 
-                 weapmenu(id); 
-                 return PLUGIN_HANDLED; 
-             } 
-             else if(g_AWPCvarHook[MaxAwp]) { 
-                 switch(get_member(id, m_iTeam)) { 
-                     case TEAM_TERRORIST: { 
-                         if(g_Awps[TE] < g_AWPCvarHook[MaxAwp]) g_Awps[TE]++; 
-                         else { 
-                             client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]); 
-                             weapmenu(id); 
-                             return PLUGIN_HANDLED; 
-                         } 
-                     } 
-                     case TEAM_CT: { 
-                         if(g_Awps[CT] < g_AWPCvarHook[MaxAwp]) g_Awps[CT]++; 
-                         else { 
-                             client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]); 
-                             weapmenu(id); 
-                             return PLUGIN_HANDLED; 
-                         } 
-                     } 
-                 } 
-             } 
-         } 
-         
-         if(get_pcvar_num(g_Cvars[PistolMenu]) == 1) { 
-             menu_display(id, g_iSec_EquipMenuID, 0); 
-         } 
-         else { 
-             rg_give_item(id, "weapon_deagle", GT_REPLACE); 
-             rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); 
-         } 
-         
-         add_weapon(id, menudata[weap_name], menudata[bpammo]); 
-         rg_set_user_armor(id, 100, ARMOR_VESTHELM); 
-         give_grenades(id); 
-         strtoupper(menudata[weap_name]); 
-         client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_CHOOSED", menudata[weap_name][7]); 
-         g_Used[id] = true; 
-       
-         return PLUGIN_HANDLED; 
-     } 
-       
-     stock add_weapon(id, const weapname[], bp_ammo) { 
-         rg_give_item(id, weapname, GT_REPLACE); 
-         new weaponid = rg_get_weapon_info(weapname, WI_ID); 
-         rg_set_user_bpammo(id, WeaponIdType:weaponid, bp_ammo); 
-     } 
-       
-     public Sec_WeaponMenuHandler(id, iMenu, iItem) { 
-         if(iItem == MENU_EXIT) return PLUGIN_HANDLED; 
-       
-         new szNum[3], iAccess, cb; 
-         menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb); 
-       
-         new iItemIndex = str_to_num(szNum); 
-         new menudata[weapinfo]; 
-         
-         ArrayGetArray(g_Secondary_MenuItems, iItemIndex, menudata); 
-         
-         add_weapon(id, menudata[weap_name], menudata[bpammo]); 
-         
-         return PLUGIN_HANDLED; 
-     } 
-       
-     public Event_NewRound() { 
-         arrayset(g_Used, false, sizeof(g_Used)); 
-         arrayset(g_Awps, 0, sizeof(g_Awps)); 
-         g_AWPCvarHook[MinPlayers] = get_pcvar_num(g_Cvars[AwpMinPlayers]); 
-         g_AllowAWP = (get_member_game(m_iNumTerrorist) >= g_AWPCvarHook[MinPlayers] && get_member_game(m_iNumCT) >= g_AWPCvarHook[MinPlayers]) ? true : false; 
-         g_Grenades[HE] = get_pcvar_num(g_Cvars[MaxHeg]); 
-         g_Grenades[FLASH] = get_pcvar_num(g_Cvars[MaxFlash]); 
-         g_Grenades[SMOKE] = get_pcvar_num(g_Cvars[MaxSmoke]); 
-         g_AWPCvarHook[MaxAwp] = get_pcvar_num(g_Cvars[MaxAwps]); 
-     } 
-       
-     public weapmenu(id) { 
-         if (!is_user_alive(id) || g_Used[id]) return; 
-         
-         menu_display(id, g_iPrim_EquipMenuID, 0); 
-     } 
-       
-     give_grenades(id) { 
-         if(g_Grenades[HE]) 
-             add_weapon(id, "weapon_hegrenade", g_Grenades[HE]); 
-       
-         if(g_Grenades[FLASH]) 
-             add_weapon(id, "weapon_flashbang", g_Grenades[FLASH]); 
-       
-         if(g_Grenades[SMOKE]) 
-             add_weapon(id, "weapon_smokegrenade", g_Grenades[SMOKE]); 
-     } 
-       
-     public Event_ResetHUD(id) { 
-         set_member(id, m_iClientHideHUD, 0) 
-         set_member(id, m_iHideHUD, HUD_HIDE_MONEY) 
-     } 
-       
-     public Event_HideWeapon(id) { 
-         // for compatibility with other plugins using that message; ZP for example 
-         new iFlags = read_data(1) 
-         if(~iFlags & HUD_HIDE_MONEY) { 
-             set_member(id, m_iClientHideHUD, 0) 
-             set_member(id, m_iHideHUD, iFlags|HUD_HIDE_MONEY) 
-         } 
-     } 
-       
-     public plugin_end() { 
-         ArrayDestroy(g_Primary_MenuItems); 
-         ArrayDestroy(g_Secondary_MenuItems); 
-     }