Advertisement
mforce

Extended Weapon Menu

Feb 21st, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.34 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <fun>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6.  
  7. new const PLUGIN[] = "Extended Weapon Menu";
  8. new const VERSION[] = "1.0";
  9. new const AUTHOR[] = "mforce";
  10.  
  11.  
  12. new const PREFIX[] = "EWM";
  13.  
  14. enum _:weapinfo {name[32], weap_name[32], bpammo};
  15. enum _:PCVARS {AwpMinPlayers, MaxAwps, BlockMaps, PistolMenu, MaxHeg, MaxFlash, MaxSmoke}
  16. enum _:TEAMS {TE, CT};
  17. new g_Cvars[PCVARS], bool:g_AllowAWP, g_Awps[TEAMS], bool:g_Used[33];
  18.  
  19. new const weapons[][weapinfo] = {
  20.     {"M4A1", "weapon_m4a1", 90},
  21.     {"AK47", "weapon_ak47", 90},
  22.     {"AWP", "weapon_awp", 30},
  23.     {"M249", "weapon_m249", 200},
  24.     {"AUG", "weapon_aug", 90},
  25.     {"FAMAS", "weapon_famas", 90},
  26.     {"GALIL", "weapon_galil", 90},
  27.     {"MP5NAVY", "weapon_mp5navy", 120},
  28.     {"XM1014", "weapon_xm1014", 32},
  29.     {"M3", "weapon_m3", 32},
  30.     {"SCOUT", "weapon_scout", 90},
  31.     {"P90", "weapon_p90", 100},
  32.     {"TMP", "weapon_tmp", 120},
  33.     {"UMP45", "weapon_ump45", 100},
  34.     {"MAC10", "weapon_mac10", 100}
  35. };
  36.  
  37. new const pistols[][weapinfo] = {
  38.     {"GLOCK18", "weapon_glock18", 120},
  39.     {"USP", "weapon_usp", 100},
  40.     {"DEAGLE", "weapon_deagle", 35},
  41.     {"FIVESEVEN", "weapon_fiveseven", 100},
  42.     {"P228", "weapon_p228", 52},
  43.     {"ELITE", "weapon_elite", 120}
  44. };
  45.  
  46. public plugin_init() {
  47.     register_plugin(PLUGIN, VERSION, AUTHOR);
  48.     g_Cvars[AwpMinPlayers] = register_cvar("ewm_awpminplayers", "4")
  49.     g_Cvars[MaxAwps] = register_cvar("ewm_maxawp", "3")
  50.     g_Cvars[BlockMaps] = register_cvar("ewm_blockmaps", "0")
  51.     g_Cvars[PistolMenu] = register_cvar("ewm_pistolmenu", "0")
  52.     g_Cvars[MaxHeg] = register_cvar("ewm_maxheg", "1")
  53.     g_Cvars[MaxFlash] = register_cvar("ewm_maxflash", "2")
  54.     g_Cvars[MaxSmoke] = register_cvar("ewm_maxsmoke", "1")
  55.     RegisterHam(Ham_Spawn, "player", "spawn_event", 1);
  56.     register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
  57.     register_clcmd("say /fegyo", "weapmenu");
  58.     register_clcmd("say /fegyomenu", "weapmenu");
  59.     register_clcmd("say /fegyver", "weapmenu");
  60.     register_clcmd("say /fegyvermenu", "weapmenu");
  61.     register_clcmd("say /weap", "weapmenu");
  62.     register_clcmd("say /weapon", "weapmenu");
  63.     register_clcmd("say /weaponmenu", "weapmenu");
  64.     register_clcmd("say /gun", "weapmenu");
  65.     register_clcmd("say /guns", "weapmenu");
  66.     register_message(get_user_msgid("Money"), "MessageMoney");
  67.     register_message(get_user_msgid("HideWeapon"), "MessageHideWeapon");
  68.     register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon");
  69. }
  70.  
  71. public plugin_cfg() {
  72.     if(get_pcvar_num(g_Cvars[BlockMaps]) == 1) read_blockedmaps();
  73. }
  74.  
  75. read_blockedmaps() {
  76.     new sBuffer[256], sFile[64], sData[32], pFile;
  77.     new mapname[32]; get_mapname(mapname, charsmax(mapname));
  78.  
  79.     get_localinfo("amxx_configsdir", sFile, charsmax(sFile));
  80.     format(sFile, charsmax(sFile), "%s/ewm_blockmaps.ini", sFile);
  81.  
  82.     pFile = fopen(sFile, "rt");
  83.  
  84.     if(pFile) {    
  85.         while(!feof(pFile)) {
  86.             fgets(pFile, sBuffer, charsmax(sBuffer));
  87.             trim(sBuffer);
  88.             if(sBuffer[0] == ';') continue;
  89.  
  90.             parse(sBuffer, sData, charsmax(sData));
  91.  
  92.             if(containi(mapname, sData) != -1) {
  93.                 fclose(pFile);
  94.                 pause("od");
  95.             }
  96.         }
  97.         fclose(pFile);
  98.     }
  99.     else fprintf(pFile, ";awp_^n;fy_");
  100. }
  101.  
  102. public Event_NewRound() {
  103.     arrayset(g_Used, false, sizeof(g_Used));
  104.     arrayset(g_Awps, 0, sizeof(g_Awps));
  105.     new minplayers = get_pcvar_num(g_Cvars[AwpMinPlayers]);
  106.     g_AllowAWP = (GetPlayers(1) >= minplayers && GetPlayers(2) >= minplayers) ? true : false;
  107. }
  108.  
  109. public spawn_event(id) weapmenu(id);
  110.  
  111. public weapmenu(id) {
  112.     if (!is_user_alive(id) || g_Used[id]) return;
  113.    
  114.     switch(cs_get_user_team(id)) {
  115.         case CS_TEAM_T: {
  116.             if(user_has_weapon(id, CSW_C4)) {
  117.                 strip_user_weapons(id)
  118.                 give_item(id, "weapon_c4")
  119.                 cs_set_user_plant(id,1,1)
  120.             }
  121.             else {
  122.                 strip_user_weapons(id)
  123.             }
  124.         }
  125.         case CS_TEAM_CT: {
  126.             strip_user_weapons(id);
  127.             cs_set_user_defuse(id, 1);
  128.         }
  129.     }
  130.     give_item(id, "weapon_knife");
  131.  
  132.     new s_MenuName[128]; formatex(s_MenuName, charsmax(s_MenuName), "\y[%s] \w%s^nby \r%s", PREFIX, PLUGIN, AUTHOR);
  133.     new menu = menu_create(s_MenuName, "weapmenu_h");
  134.     for(new i; i<sizeof(weapons);i++) {
  135.         menu_additem(menu, weapons[i][name], "", 0)
  136.     }
  137.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  138.     menu_setprop(menu, MPROP_BACKNAME, "Vissza");
  139.     menu_setprop(menu, MPROP_NEXTNAME, "Következő");
  140.     menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
  141.     menu_display(id, menu, 0);
  142. }
  143.  
  144. public weapmenu_h(id, menu, item) {
  145.     if(item == MENU_EXIT) {
  146.         menu_destroy(menu);
  147.         return PLUGIN_HANDLED;
  148.     }
  149.  
  150.     new maxwp = get_pcvar_num(g_Cvars[MaxAwps]);
  151.     if(equal(weapons[item][weap_name], "weapon_awp")) {
  152.         if(!g_AllowAWP) {
  153.             new minplay = get_pcvar_num(g_Cvars[AwpMinPlayers])
  154.             ChatColor(id, "^4[%s]^1 Nincs lehetőség ^3AWP^1 vásárlására, mert nincs %iv%i.", PREFIX, minplay, minplay)
  155.             weapmenu(id);
  156.             return PLUGIN_HANDLED;
  157.         }
  158.         else if(maxwp) {
  159.             switch(cs_get_user_team(id)) {
  160.                 case CS_TEAM_T: {
  161.                     if(g_Awps[TE] < maxwp) g_Awps[TE]++;
  162.                     else {
  163.                         ChatColor(id, "^4[%s]^1 Nincs lehetőség több ^3AWP^1 vásárlására a csapatodban", PREFIX)
  164.                         weapmenu(id);
  165.                         return PLUGIN_HANDLED;
  166.                     }
  167.                 }
  168.                 case CS_TEAM_CT: {
  169.                     if(g_Awps[CT] < maxwp) g_Awps[CT]++;
  170.                     else {
  171.                         ChatColor(id, "^4[%s]^1 Nincs lehetőség több ^3AWP^1 vásárlására a csapatodban", PREFIX)
  172.                         weapmenu(id);
  173.                         return PLUGIN_HANDLED;
  174.                     }
  175.                 }
  176.             }
  177.         }
  178.     }
  179.    
  180.     if(get_pcvar_num(g_Cvars[PistolMenu]) == 1) {
  181.         pistolmenu(id);
  182.     }
  183.     else {
  184.         give_item(id, "weapon_deagle");
  185.         cs_set_user_bpammo(id, CSW_DEAGLE, 35);
  186.     }
  187.     give_item(id, weapons[item][weap_name]);
  188.     cs_set_user_bpammo(id, get_weaponid(weapons[item][weap_name]), weapons[item][bpammo]);
  189.     cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
  190.     give_grenades(id);
  191.     ChatColor(id, "^4[%s]^1 A(z)^3 %s ^1csomagot választottad.", PREFIX, weapons[item][name]);
  192.     g_Used[id] = true;
  193.    
  194.     menu_destroy(menu);
  195.     return PLUGIN_HANDLED;
  196. }
  197.  
  198. public pistolmenu(id) {
  199.     new s_MenuName[128]; formatex(s_MenuName, charsmax(s_MenuName), "\y[%s] \w%s^nby \r%s", PREFIX, PLUGIN, AUTHOR);
  200.     new menu = menu_create(s_MenuName, "pistolmenu_h");
  201.     for(new i; i<sizeof(pistols);i++) {
  202.         menu_additem(menu, pistols[i][name], "", 0)
  203.     }
  204.     menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
  205.     menu_setprop(menu, MPROP_BACKNAME, "Vissza");
  206.     menu_setprop(menu, MPROP_NEXTNAME, "Következő");
  207.     menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
  208.     menu_display(id, menu, 0);
  209. }
  210.  
  211. public pistolmenu_h(id, menu, item) {
  212.     if(item == MENU_EXIT) {
  213.         menu_destroy(menu);
  214.         return PLUGIN_HANDLED;
  215.     }
  216.    
  217.     give_item(id, pistols[item][weap_name]);
  218.     cs_set_user_bpammo(id, get_weaponid(pistols[item][weap_name]), pistols[item][bpammo]);
  219.    
  220.     menu_destroy(menu);
  221.     return PLUGIN_HANDLED;
  222. }
  223.  
  224. give_grenades(id) {
  225.     new maxheg = get_pcvar_num(g_Cvars[MaxHeg]);
  226.     if(maxheg) {
  227.         give_item(id, "weapon_hegrenade");
  228.         cs_set_user_bpammo(id, CSW_HEGRENADE, maxheg);
  229.     }
  230.    
  231.     new maxflash = get_pcvar_num(g_Cvars[MaxFlash]);
  232.     if(maxflash) {
  233.         give_item(id, "weapon_flashbang" );
  234.         cs_set_user_bpammo(id, CSW_FLASHBANG, maxflash);
  235.     }
  236.    
  237.     new maxsmoke = get_pcvar_num(g_Cvars[MaxSmoke]);
  238.     if(maxsmoke) {
  239.         give_item(id, "weapon_smokegrenade" );
  240.         cs_set_user_bpammo(id, CSW_SMOKEGRENADE, maxsmoke);
  241.     }
  242. }
  243.  
  244. GetPlayers(team) {
  245.     new players[32], num;
  246.     get_players(players, num, "ce", team == 1 ? "TERRORIST":"CT")
  247.  
  248.     return num;
  249. }
  250.  
  251. public MessageMoney(msgid, dest, id) {
  252.     set_pdata_int(id, 115, 0);
  253.     set_msg_arg_int(1, ARG_LONG, 0);
  254.     set_msg_arg_int(2, ARG_BYTE, 0);
  255. }
  256.  
  257. public MessageHideWeapon(msgid, dest, id) {
  258.     set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | (1<<5));
  259. }
  260.  
  261. public Message_StatusIcon(iMsgId, iMsgDest, id) {
  262.     static szIcon[8];
  263.     get_msg_arg_string(2, szIcon, charsmax(szIcon));
  264.     if(equal(szIcon, "buyzone")) {
  265.         if(get_msg_arg_int(1)) {
  266.             set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0));
  267.             return PLUGIN_HANDLED;
  268.         }
  269.     }
  270.     return PLUGIN_CONTINUE;
  271. }
  272.  
  273. stock ChatColor(const id, const szMessage[], any:...) {
  274.     static pnum, players[32], szMsg[190], IdMsg;
  275.     vformat(szMsg, charsmax(szMsg), szMessage, 3);
  276.    
  277.     if(!IdMsg) IdMsg = get_user_msgid("SayText");
  278.    
  279.     if(id) {
  280.         if(!is_user_connected(id)) return;
  281.         players[0] = id;
  282.         pnum = 1;
  283.     }
  284.     else get_players(players, pnum, "c");
  285.    
  286.     for(new i; i < pnum; i++) {
  287.         message_begin(MSG_ONE, IdMsg, .player = players[i]);
  288.         write_byte(players[i]);
  289.         write_string(szMsg);
  290.         message_end();
  291.     }
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement