hlmod.hu
https://hlmod.hu/

Extended Weapon Menu
https://hlmod.hu/viewtopic.php?f=101&t=25268
Oldal: 1 / 4

Szerző:  mforce [ 2016.06.20. 17:29 ]
Hozzászólás témája:  Extended Weapon Menu

Plugin Neve:
Extended Weapon Menu
Plugint készitette:
mforce
Játék:
Counter-Strike
Kategória:
Játékmenet
Eredeti link:
Jóváhagyó:


Extended Weapon Menu
v1.4 by mforce


Leírás:
Agyon módosítható, de mégis egyszerű fegyvermenü. Támogat AWP limitet, pisztolymenüt vagy automata deaglet, gránátok száma megszabható.
Buyzone tiltás, pénzhud tiltás.

Parancsok:
Ha nem sikerült a menüben vásárolnod, akkor beírhatod:
/weap, /guns, /gun

Konfiguráció:
Prefix módosítható az .sma fájlban:
  1. new const PREFIX[] = "EWM"


A fegyverek és pisztolyok is módosíthatók az "ewm_weapons.ini" fájlban.
Kód:
; Weapon name and bpammo

[weapons]
m4a1 90
ak47 90
awp 30
m249 200
aug 90
famas 90
galil 90
mp5navy 120
xm1014 32
m3 32
scout 90
p90 100
tmp 120
ump45 100
mac10 100

[pistols]
glock18 120
usp 100
deagle 35
fiveseven 100
p228 52
elite 120


Cvarok:
0 érték mindenhol a kikapcsolás.
1 a bekapcsolás.

ewm_awpminplayers Alap: 4 - Hány v hánytól legyen engedélyezve az AWP vásárlás.
ewm_maxawp Alap: 3 - Mennyi legyen a max AWP egy csapatban.
ewm_pistolmenu Alap: 0 - Pisztolymenü használata vagy 0 értéken alap automatikus Deagle.
ewm_maxheg Alap: 1 - Robbanó gránátok száma.
ewm_maxflash Alap: 2 - Vakító gránátok száma.
ewm_maxsmoke Alap: 1 - Füst gránátok száma.

Fordítások:
[hu] - mforce
[en] - mforce
[ru] - gudaus
[bp] - addons_zz
[ro] - iNdio
[it] - iNdio
[sr] - SkazzY
[ua] - Borzalex

Változtatások:
v1.1 - Multilang hozzáadva, strip_user_weapons javítva, "hardcoded" dolgok javítva, szükségtelen cvar eltávolítva, ColorChat include hozzáadva.
Pénz hud blokkolás átdolgozva, köszönettel: Safety1st-nek.
v1.2 - AMXX 1.8.3 támogatás javítva, kevesebb cvar hook.
v1.21 - Multilang fix.
v1.3 - Plugin pause eltávolítva. Fájlok hozzáadva a fegyverek módosításához.
v1.4 - Fegyver adás, eldobás hozzáadva Safety1st pluginja alapján, menü szerkezeti felépítések Vaqtincha pluginja alapján.


SMA
AMXX
Tömörített fájl
*A fordítás a aghl.ru oldalon történik.

    Szerző:  mforce [ 2016.06.20. 18:56 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    ReApi verzió is:
    (Még teszteletlen)
    1. /*
    2.         Extended Weapon Menu
    3.             v1.4 by mforce
    4.    
    5.     Changes:
    6.    
    7.     v1.1 - Multilang added, strip_user_weapons fixed, "hardcoded" things fixed,
    8.     unnecessary cvar removed, using Safety1st method for money block, ColorChat included.
    9.    
    10.     v1.2 - AMXX 1.8.3 support fixed, minimal improvements (less cvar hook)
    11.     v1.21 - Multilang fix.
    12.     v1.3 - Plugin pause removed. Added files for modify weapon menu items.
    13.     v1.4 - Added give and drop by Safety1st, menu builds by Vaqtincha's plugin.
    14. */
    15.  
    16.  
    17. #include <amxmodx>
    18. #include <reapi>
    19.  
    20. new const PLUGIN[] = "[ReApi] Extended Weapon Menu";
    21. new const VERSION[] = "1.4";
    22. new const AUTHOR[] = "mforce";
    23.  
    24.  
    25. new const PREFIX[] = "^4[EWM]";
    26.  
    27. #if AMXX_VERSION_NUM < 183
    28. #include <colorchat>
    29. const MAX_PLAYERS = 32;
    30. #endif
    31. const HUD_HIDE_MONEY = 1<<5;
    32.  
    33. new Array:g_Primary_MenuItems, Array:g_Secondary_MenuItems;
    34. new g_iPrim_TotalItems, g_iSec_TotalItems;
    35. new g_iPrim_EquipMenuID, g_iSec_EquipMenuID;
    36. enum _:weapinfo {weap_name[32], bpammo};
    37. enum _:PCVARS {AwpMinPlayers, MaxAwps, PistolMenu, MaxHeg, MaxFlash, MaxSmoke}
    38. enum _:TEAMS {TE, CT};
    39. enum _:MAXGRENADES {HE, FLASH, SMOKE};
    40. enum _:AWPCVARS {MinPlayers, MaxAwp};
    41. new g_Cvars[PCVARS], bool:g_AllowAWP, g_Awps[TEAMS], bool:g_Used[MAX_PLAYERS+1], g_Grenades[MAXGRENADES], g_AWPCvarHook[AWPCVARS];
    42.  
    43.  
    44. new const g_szWeaponNames[CSW_P90+1][] = {
    45.     "","weapon_p228","weapon_shield","weapon_scout","weapon_hegrenade","weapon_xm1014","weapon_c4",
    46.     "weapon_mac10","weapon_aug","weapon_smokegrenade","weapon_elite","weapon_fiveseven","weapon_ump45",
    47.     "weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp",
    48.     "weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1",
    49.     "weapon_flashbang","weapon_deagle","weapon_sg552","weapon_ak47","weapon_knife","weapon_p90"
    50. }
    51.  
    52. public plugin_init() {
    53.     register_plugin(PLUGIN, VERSION, AUTHOR);
    54.     register_dictionary("extended_weapon_menu.txt");
    55.     g_Cvars[AwpMinPlayers] = register_cvar("ewm_awpminplayers", "4")
    56.     g_Cvars[MaxAwps] = register_cvar("ewm_maxawp", "3")
    57.     g_Cvars[PistolMenu] = register_cvar("ewm_pistolmenu", "0")
    58.     g_Cvars[MaxHeg] = register_cvar("ewm_maxheg", "1")
    59.     g_Cvars[MaxFlash] = register_cvar("ewm_maxflash", "2")
    60.     g_Cvars[MaxSmoke] = register_cvar("ewm_maxsmoke", "1")
    61.     RegisterHookChain(RG_CBasePlayer_Spawn, "weapmenu", true);
    62.     register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    63.    
    64.     new const commands[][] = {"say /gun", "say /guns", "say /weap", "say_team /gun", "say_team /guns", "say_team /weap"};
    65.     for(new i; i < sizeof(commands); i++) {
    66.         register_clcmd(commands[i], "weapmenu");
    67.     }
    68.    
    69.     set_member_game(m_bMapHasBuyZone, false);
    70.     register_event("ResetHUD", "Event_ResetHUD", "b")
    71.     register_event("HideWeapon", "Event_HideWeapon", "b")
    72.     set_msg_block(get_user_msgid("Money"), BLOCK_SET)
    73.    
    74.     g_Primary_MenuItems = ArrayCreate(weapinfo);
    75.     g_Secondary_MenuItems = ArrayCreate(weapinfo);
    76. }
    77.  
    78. public plugin_cfg() {
    79.     new sBuffer[256], sFile[128], sData[2][32], pFile;
    80.     get_localinfo("amxx_configsdir", sFile, charsmax(sFile));
    81.     add(sFile, charsmax(sFile), "/ewm_weapons.ini");
    82.  
    83.     pFile = fopen(sFile, "rt");
    84.     if(!pFile) set_fail_state("Error reading weapon menu items config file.");
    85.    
    86.     new Trie:tCheckWeaponName = TrieCreate();
    87.     new Trie:tCheckAddedItems = TrieCreate()
    88.    
    89.     for(new i = 0; i< sizeof(g_szWeaponNames); i++)
    90.         TrieSetCell(tCheckWeaponName, g_szWeaponNames[i], 1);
    91.    
    92.     new bSection, menudata[weapinfo];
    93.    
    94.     while(!feof(pFile)) {
    95.         fgets(pFile, sBuffer, charsmax(sBuffer)); trim(sBuffer);
    96.         if(!sBuffer[0] || sBuffer[0] == ';' || sBuffer[0] == '#') continue;
    97.        
    98.         if(sBuffer[0] == '[') {
    99.             if(equali(sBuffer, "[weapons]")) bSection = 1;
    100.             else if(equali(sBuffer, "[pistols]")) bSection = 2;
    101.             else bSection = 0;
    102.            
    103.             continue;
    104.         }
    105.  
    106.         if(parse(sBuffer, sData[0], charsmax(sData[]), sData[1], charsmax(sData[]))) {
    107.             format(sData[0], charsmax(sData[]), "weapon_%s", sData[0]);
    108.             strtolower(sData[0]);
    109.            
    110.             if(!sData[0][0] || !TrieKeyExists(tCheckWeaponName, sData[0])) {
    111.                 server_print("WARNING: Invalid weapon name ^"%s^" will be skipped!", sData[0]);
    112.                 continue;
    113.             }
    114.             if(TrieKeyExists(tCheckAddedItems, sData[0])) {
    115.                 server_print("WARNING: Item ^"%s^" is already added!", sData[0]);
    116.                 continue;
    117.             }
    118.            
    119.             copy(menudata[weap_name], charsmax(menudata[weap_name]), sData[0]);
    120.             menudata[bpammo] = str_to_num(sData[1]);
    121.             TrieSetCell(tCheckAddedItems, sData[0], 1);
    122.            
    123.             if(bSection == 1) {
    124.                 ArrayPushArray(g_Primary_MenuItems, menudata);
    125.                 g_iPrim_TotalItems++
    126.             }
    127.             else if(bSection == 2) {
    128.                 ArrayPushArray(g_Secondary_MenuItems, menudata);
    129.                 g_iSec_TotalItems++
    130.             }
    131.         }
    132.     }
    133.    
    134.     fclose(pFile);
    135.     TrieDestroy(tCheckWeaponName);
    136.     TrieDestroy(tCheckAddedItems);
    137.    
    138.     if(!g_iPrim_TotalItems || !g_iSec_TotalItems) set_fail_state("Error! The menu doesn't contain any weapons.");
    139.    
    140.     build_menu();
    141. }
    142.  
    143. build_menu() {
    144.     g_iPrim_EquipMenuID = menu_create(PLUGIN, "Prim_WeaponMenuHandler")
    145.     g_iSec_EquipMenuID = menu_create(PLUGIN, "Sec_WeaponMenuHandler")
    146.     // menu_setprop(g_iPrim_EquipMenuID, MPROP_NUMBER_COLOR, "\r")
    147.  
    148.     new szMenuText[64], menudata[weapinfo], szNum[3], i;
    149.    
    150.     for(i = 0; i < g_iPrim_TotalItems; i++) {
    151.         ArrayGetArray(g_Primary_MenuItems, i, menudata)
    152.         strtoupper(menudata[weap_name]);
    153.         formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]);
    154.         num_to_str(i, szNum, charsmax(szNum))
    155.         menu_additem(g_iPrim_EquipMenuID, szMenuText, szNum, 0)
    156.     }
    157.    
    158.     for(i = 0; i < g_iSec_TotalItems; i++) {
    159.         ArrayGetArray(g_Secondary_MenuItems, i, menudata)
    160.         strtoupper(menudata[weap_name]);
    161.         formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]);
    162.         num_to_str(i, szNum, charsmax(szNum))
    163.         menu_additem(g_iSec_EquipMenuID, szMenuText, szNum, 0)
    164.     }
    165.    
    166.     menu_setprop(g_iPrim_EquipMenuID, MPROP_EXIT, MEXIT_ALL);
    167.     menu_setprop(g_iSec_EquipMenuID, MPROP_EXIT, MEXIT_ALL);
    168.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_BACK");
    169.     menu_setprop(g_iPrim_EquipMenuID, MPROP_BACKNAME, szMenuText);
    170.     menu_setprop(g_iSec_EquipMenuID, MPROP_BACKNAME, szMenuText);
    171.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_NEXT");
    172.     menu_setprop(g_iPrim_EquipMenuID, MPROP_NEXTNAME, szMenuText);
    173.     menu_setprop(g_iSec_EquipMenuID, MPROP_NEXTNAME, szMenuText);
    174.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_EXIT");
    175.     menu_setprop(g_iPrim_EquipMenuID, MPROP_EXITNAME, szMenuText);
    176.     menu_setprop(g_iSec_EquipMenuID, MPROP_EXITNAME, szMenuText);
    177. }
    178.  
    179. public Prim_WeaponMenuHandler(id, iMenu, iItem) {
    180.     if(iItem == MENU_EXIT) return PLUGIN_HANDLED;
    181.  
    182.     new szNum[3], iAccess, cb;
    183.     menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb);
    184.  
    185.     new iItemIndex = str_to_num(szNum);
    186.     new menudata[weapinfo];
    187.    
    188.     ArrayGetArray(g_Primary_MenuItems, iItemIndex, menudata);
    189.    
    190.     if(equal(menudata[weap_name], "weapon_awp")) {
    191.         if(!g_AllowAWP) {
    192.             client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_ALLOWFROM", g_AWPCvarHook[MinPlayers], g_AWPCvarHook[MinPlayers]);
    193.             weapmenu(id);
    194.             return PLUGIN_HANDLED;
    195.         }
    196.         else if(g_AWPCvarHook[MaxAwp]) {
    197.             switch(get_member(id, m_iTeam)) {
    198.                 case TEAM_TERRORIST: {
    199.                     if(g_Awps[TE] < g_AWPCvarHook[MaxAwp]) g_Awps[TE]++;
    200.                     else {
    201.                         client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]);
    202.                         weapmenu(id);
    203.                         return PLUGIN_HANDLED;
    204.                     }
    205.                 }
    206.                 case TEAM_CT: {
    207.                     if(g_Awps[CT] < g_AWPCvarHook[MaxAwp]) g_Awps[CT]++;
    208.                     else {
    209.                         client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]);
    210.                         weapmenu(id);
    211.                         return PLUGIN_HANDLED;
    212.                     }
    213.                 }
    214.             }
    215.         }
    216.     }
    217.    
    218.     if(get_pcvar_num(g_Cvars[PistolMenu]) == 1) {
    219.         menu_display(id, g_iSec_EquipMenuID, 0);
    220.     }
    221.     else {
    222.         rg_give_item(id, "weapon_deagle", GT_REPLACE);
    223.         rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
    224.     }
    225.    
    226.     add_weapon(id, menudata[weap_name], menudata[bpammo]);
    227.     rg_set_user_armor(id, 100, ARMOR_VESTHELM);
    228.     give_grenades(id);
    229.     strtoupper(menudata[weap_name]);
    230.     client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_CHOOSED", menudata[weap_name][7]);
    231.     g_Used[id] = true;
    232.  
    233.     return PLUGIN_HANDLED;
    234. }
    235.  
    236. stock add_weapon(id, const weapname[], bp_ammo) {
    237.     rg_give_item(id, weapname, GT_REPLACE);
    238.     new weaponid = rg_get_weapon_info(weapname, WI_ID);
    239.     rg_set_user_bpammo(id, WeaponIdType:weaponid, bp_ammo);
    240. }
    241.  
    242. public Sec_WeaponMenuHandler(id, iMenu, iItem) {
    243.     if(iItem == MENU_EXIT) return PLUGIN_HANDLED;
    244.  
    245.     new szNum[3], iAccess, cb;
    246.     menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb);
    247.  
    248.     new iItemIndex = str_to_num(szNum);
    249.     new menudata[weapinfo];
    250.    
    251.     ArrayGetArray(g_Secondary_MenuItems, iItemIndex, menudata);
    252.    
    253.     add_weapon(id, menudata[weap_name], menudata[bpammo]);
    254.    
    255.     return PLUGIN_HANDLED;
    256. }
    257.  
    258. public Event_NewRound() {
    259.     arrayset(g_Used, false, sizeof(g_Used));
    260.     arrayset(g_Awps, 0, sizeof(g_Awps));
    261.     g_AWPCvarHook[MinPlayers] = get_pcvar_num(g_Cvars[AwpMinPlayers]);
    262.     g_AllowAWP = (get_member_game(m_iNumTerrorist) >= g_AWPCvarHook[MinPlayers] && get_member_game(m_iNumCT) >= g_AWPCvarHook[MinPlayers]) ? true : false;
    263.     g_Grenades[HE] = get_pcvar_num(g_Cvars[MaxHeg]);
    264.     g_Grenades[FLASH] = get_pcvar_num(g_Cvars[MaxFlash]);
    265.     g_Grenades[SMOKE] = get_pcvar_num(g_Cvars[MaxSmoke]);
    266.     g_AWPCvarHook[MaxAwp] = get_pcvar_num(g_Cvars[MaxAwps]);
    267. }
    268.  
    269. public weapmenu(id) {
    270.     if (!is_user_alive(id) || g_Used[id]) return;
    271.    
    272.     menu_display(id, g_iPrim_EquipMenuID, 0);
    273. }
    274.  
    275. give_grenades(id) {
    276.     if(g_Grenades[HE])
    277.         add_weapon(id, "weapon_hegrenade", g_Grenades[HE]);
    278.  
    279.     if(g_Grenades[FLASH])
    280.         add_weapon(id, "weapon_flashbang", g_Grenades[FLASH]);
    281.  
    282.     if(g_Grenades[SMOKE])
    283.         add_weapon(id, "weapon_smokegrenade", g_Grenades[SMOKE]);
    284. }
    285.  
    286. public Event_ResetHUD(id) {
    287.     set_member(id, m_iClientHideHUD, 0)
    288.     set_member(id, m_iHideHUD, HUD_HIDE_MONEY)
    289. }
    290.  
    291. public Event_HideWeapon(id) {
    292.     // for compatibility with other plugins using that message; ZP for example
    293.     new iFlags = read_data(1)
    294.     if(~iFlags & HUD_HIDE_MONEY) {
    295.         set_member(id, m_iClientHideHUD, 0)
    296.         set_member(id, m_iHideHUD, iFlags|HUD_HIDE_MONEY)
    297.     }
    298. }
    299.  
    300. public plugin_end() {
    301.     ArrayDestroy(g_Primary_MenuItems);
    302.     ArrayDestroy(g_Secondary_MenuItems);
    303. }

    Szerző:  Papi [ 2016.06.21. 18:17 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Szép! :)

    Szerző:  [R]ó[M]e[Ó] [ 2016.06.21. 19:57 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Gratulállok.

    Szerző:  mforce [ 2016.06.21. 20:11 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Még el se fogadták :D
    De eredeti linken ott van.

    Szerző:  D34D [ 2016.06.21. 22:18 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Nagyon szép, munkka.

    Szerző:  theglorious [ 2016.06.23. 11:05 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    mforce írta:
    ReApi verzió is:
    (Még teszteletlen)
    1. /*
    2.         Extended Weapon Menu
    3.             v1.4 by mforce
    4.    
    5.     Changes:
    6.    
    7.     v1.1 - Multilang added, strip_user_weapons fixed, "hardcoded" things fixed,
    8.     unnecessary cvar removed, using Safety1st method for money block, ColorChat included.
    9.    
    10.     v1.2 - AMXX 1.8.3 support fixed, minimal improvements (less cvar hook)
    11.     v1.21 - Multilang fix.
    12.     v1.3 - Plugin pause removed. Added files for modify weapon menu items.
    13.     v1.4 - Added give and drop by Safety1st, menu builds by Vaqtincha's plugin.
    14. */
    15.  
    16.  
    17. #include <amxmodx>
    18. #include <reapi>
    19.  
    20. new const PLUGIN[] = "[ReApi] Extended Weapon Menu";
    21. new const VERSION[] = "1.4";
    22. new const AUTHOR[] = "mforce";
    23.  
    24.  
    25. new const PREFIX[] = "^4[EWM]";
    26.  
    27. #if AMXX_VERSION_NUM < 183
    28. #include <colorchat>
    29. const MAX_PLAYERS = 32;
    30. #endif
    31. const HUD_HIDE_MONEY = 1<<5;
    32.  
    33. new Array:g_Primary_MenuItems, Array:g_Secondary_MenuItems;
    34. new g_iPrim_TotalItems, g_iSec_TotalItems;
    35. new g_iPrim_EquipMenuID, g_iSec_EquipMenuID;
    36. enum _:weapinfo {weap_name[32], bpammo};
    37. enum _:PCVARS {AwpMinPlayers, MaxAwps, PistolMenu, MaxHeg, MaxFlash, MaxSmoke}
    38. enum _:TEAMS {TE, CT};
    39. enum _:MAXGRENADES {HE, FLASH, SMOKE};
    40. enum _:AWPCVARS {MinPlayers, MaxAwp};
    41. new g_Cvars[PCVARS], bool:g_AllowAWP, g_Awps[TEAMS], bool:g_Used[MAX_PLAYERS+1], g_Grenades[MAXGRENADES], g_AWPCvarHook[AWPCVARS];
    42.  
    43.  
    44. new const g_szWeaponNames[CSW_P90+1][] = {
    45.     "","weapon_p228","weapon_shield","weapon_scout","weapon_hegrenade","weapon_xm1014","weapon_c4",
    46.     "weapon_mac10","weapon_aug","weapon_smokegrenade","weapon_elite","weapon_fiveseven","weapon_ump45",
    47.     "weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp",
    48.     "weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1",
    49.     "weapon_flashbang","weapon_deagle","weapon_sg552","weapon_ak47","weapon_knife","weapon_p90"
    50. }
    51.  
    52. public plugin_init() {
    53.     register_plugin(PLUGIN, VERSION, AUTHOR);
    54.     register_dictionary("extended_weapon_menu.txt");
    55.     g_Cvars[AwpMinPlayers] = register_cvar("ewm_awpminplayers", "4")
    56.     g_Cvars[MaxAwps] = register_cvar("ewm_maxawp", "3")
    57.     g_Cvars[PistolMenu] = register_cvar("ewm_pistolmenu", "0")
    58.     g_Cvars[MaxHeg] = register_cvar("ewm_maxheg", "1")
    59.     g_Cvars[MaxFlash] = register_cvar("ewm_maxflash", "2")
    60.     g_Cvars[MaxSmoke] = register_cvar("ewm_maxsmoke", "1")
    61.     RegisterHookChain(RG_CBasePlayer_Spawn, "weapmenu", true);
    62.     register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
    63.    
    64.     new const commands[][] = {"say /gun", "say /guns", "say /weap", "say_team /gun", "say_team /guns", "say_team /weap"};
    65.     for(new i; i < sizeof(commands); i++) {
    66.         register_clcmd(commands[i], "weapmenu");
    67.     }
    68.    
    69.     set_member_game(m_bMapHasBuyZone, false);
    70.     register_event("ResetHUD", "Event_ResetHUD", "b")
    71.     register_event("HideWeapon", "Event_HideWeapon", "b")
    72.     set_msg_block(get_user_msgid("Money"), BLOCK_SET)
    73.    
    74.     g_Primary_MenuItems = ArrayCreate(weapinfo);
    75.     g_Secondary_MenuItems = ArrayCreate(weapinfo);
    76. }
    77.  
    78. public plugin_cfg() {
    79.     new sBuffer[256], sFile[128], sData[2][32], pFile;
    80.     get_localinfo("amxx_configsdir", sFile, charsmax(sFile));
    81.     add(sFile, charsmax(sFile), "/ewm_weapons.ini");
    82.  
    83.     pFile = fopen(sFile, "rt");
    84.     if(!pFile) set_fail_state("Error reading weapon menu items config file.");
    85.    
    86.     new Trie:tCheckWeaponName = TrieCreate();
    87.     new Trie:tCheckAddedItems = TrieCreate()
    88.    
    89.     for(new i = 0; i< sizeof(g_szWeaponNames); i++)
    90.         TrieSetCell(tCheckWeaponName, g_szWeaponNames[i], 1);
    91.    
    92.     new bSection, menudata[weapinfo];
    93.    
    94.     while(!feof(pFile)) {
    95.         fgets(pFile, sBuffer, charsmax(sBuffer)); trim(sBuffer);
    96.         if(!sBuffer[0] || sBuffer[0] == ';' || sBuffer[0] == '#') continue;
    97.        
    98.         if(sBuffer[0] == '[') {
    99.             if(equali(sBuffer, "[weapons]")) bSection = 1;
    100.             else if(equali(sBuffer, "[pistols]")) bSection = 2;
    101.             else bSection = 0;
    102.            
    103.             continue;
    104.         }
    105.  
    106.         if(parse(sBuffer, sData[0], charsmax(sData[]), sData[1], charsmax(sData[]))) {
    107.             format(sData[0], charsmax(sData[]), "weapon_%s", sData[0]);
    108.             strtolower(sData[0]);
    109.            
    110.             if(!sData[0][0] || !TrieKeyExists(tCheckWeaponName, sData[0])) {
    111.                 server_print("WARNING: Invalid weapon name ^"%s^" will be skipped!", sData[0]);
    112.                 continue;
    113.             }
    114.             if(TrieKeyExists(tCheckAddedItems, sData[0])) {
    115.                 server_print("WARNING: Item ^"%s^" is already added!", sData[0]);
    116.                 continue;
    117.             }
    118.            
    119.             copy(menudata[weap_name], charsmax(menudata[weap_name]), sData[0]);
    120.             menudata[bpammo] = str_to_num(sData[1]);
    121.             TrieSetCell(tCheckAddedItems, sData[0], 1);
    122.            
    123.             if(bSection == 1) {
    124.                 ArrayPushArray(g_Primary_MenuItems, menudata);
    125.                 g_iPrim_TotalItems++
    126.             }
    127.             else if(bSection == 2) {
    128.                 ArrayPushArray(g_Secondary_MenuItems, menudata);
    129.                 g_iSec_TotalItems++
    130.             }
    131.         }
    132.     }
    133.    
    134.     fclose(pFile);
    135.     TrieDestroy(tCheckWeaponName);
    136.     TrieDestroy(tCheckAddedItems);
    137.    
    138.     if(!g_iPrim_TotalItems || !g_iSec_TotalItems) set_fail_state("Error! The menu doesn't contain any weapons.");
    139.    
    140.     build_menu();
    141. }
    142.  
    143. build_menu() {
    144.     g_iPrim_EquipMenuID = menu_create(PLUGIN, "Prim_WeaponMenuHandler")
    145.     g_iSec_EquipMenuID = menu_create(PLUGIN, "Sec_WeaponMenuHandler")
    146.     // menu_setprop(g_iPrim_EquipMenuID, MPROP_NUMBER_COLOR, "\r")
    147.  
    148.     new szMenuText[64], menudata[weapinfo], szNum[3], i;
    149.    
    150.     for(i = 0; i < g_iPrim_TotalItems; i++) {
    151.         ArrayGetArray(g_Primary_MenuItems, i, menudata)
    152.         strtoupper(menudata[weap_name]);
    153.         formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]);
    154.         num_to_str(i, szNum, charsmax(szNum))
    155.         menu_additem(g_iPrim_EquipMenuID, szMenuText, szNum, 0)
    156.     }
    157.    
    158.     for(i = 0; i < g_iSec_TotalItems; i++) {
    159.         ArrayGetArray(g_Secondary_MenuItems, i, menudata)
    160.         strtoupper(menudata[weap_name]);
    161.         formatex(szMenuText, charsmax(szMenuText), "%s", menudata[weap_name][7]);
    162.         num_to_str(i, szNum, charsmax(szNum))
    163.         menu_additem(g_iSec_EquipMenuID, szMenuText, szNum, 0)
    164.     }
    165.    
    166.     menu_setprop(g_iPrim_EquipMenuID, MPROP_EXIT, MEXIT_ALL);
    167.     menu_setprop(g_iSec_EquipMenuID, MPROP_EXIT, MEXIT_ALL);
    168.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_BACK");
    169.     menu_setprop(g_iPrim_EquipMenuID, MPROP_BACKNAME, szMenuText);
    170.     menu_setprop(g_iSec_EquipMenuID, MPROP_BACKNAME, szMenuText);
    171.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_NEXT");
    172.     menu_setprop(g_iPrim_EquipMenuID, MPROP_NEXTNAME, szMenuText);
    173.     menu_setprop(g_iSec_EquipMenuID, MPROP_NEXTNAME, szMenuText);
    174.     formatex(szMenuText, charsmax(szMenuText), "%L", LANG_SERVER, "EWM_MENU_EXIT");
    175.     menu_setprop(g_iPrim_EquipMenuID, MPROP_EXITNAME, szMenuText);
    176.     menu_setprop(g_iSec_EquipMenuID, MPROP_EXITNAME, szMenuText);
    177. }
    178.  
    179. public Prim_WeaponMenuHandler(id, iMenu, iItem) {
    180.     if(iItem == MENU_EXIT) return PLUGIN_HANDLED;
    181.  
    182.     new szNum[3], iAccess, cb;
    183.     menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb);
    184.  
    185.     new iItemIndex = str_to_num(szNum);
    186.     new menudata[weapinfo];
    187.    
    188.     ArrayGetArray(g_Primary_MenuItems, iItemIndex, menudata);
    189.    
    190.     if(equal(menudata[weap_name], "weapon_awp")) {
    191.         if(!g_AllowAWP) {
    192.             client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_ALLOWFROM", g_AWPCvarHook[MinPlayers], g_AWPCvarHook[MinPlayers]);
    193.             weapmenu(id);
    194.             return PLUGIN_HANDLED;
    195.         }
    196.         else if(g_AWPCvarHook[MaxAwp]) {
    197.             switch(get_member(id, m_iTeam)) {
    198.                 case TEAM_TERRORIST: {
    199.                     if(g_Awps[TE] < g_AWPCvarHook[MaxAwp]) g_Awps[TE]++;
    200.                     else {
    201.                         client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]);
    202.                         weapmenu(id);
    203.                         return PLUGIN_HANDLED;
    204.                     }
    205.                 }
    206.                 case TEAM_CT: {
    207.                     if(g_Awps[CT] < g_AWPCvarHook[MaxAwp]) g_Awps[CT]++;
    208.                     else {
    209.                         client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_AWP_TOOMANY", g_AWPCvarHook[MaxAwp]);
    210.                         weapmenu(id);
    211.                         return PLUGIN_HANDLED;
    212.                     }
    213.                 }
    214.             }
    215.         }
    216.     }
    217.    
    218.     if(get_pcvar_num(g_Cvars[PistolMenu]) == 1) {
    219.         menu_display(id, g_iSec_EquipMenuID, 0);
    220.     }
    221.     else {
    222.         rg_give_item(id, "weapon_deagle", GT_REPLACE);
    223.         rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
    224.     }
    225.    
    226.     add_weapon(id, menudata[weap_name], menudata[bpammo]);
    227.     rg_set_user_armor(id, 100, ARMOR_VESTHELM);
    228.     give_grenades(id);
    229.     strtoupper(menudata[weap_name]);
    230.     client_print_color(id, print_team_default, "%s^1 %L", PREFIX, LANG_SERVER, "EWM_CHOOSED", menudata[weap_name][7]);
    231.     g_Used[id] = true;
    232.  
    233.     return PLUGIN_HANDLED;
    234. }
    235.  
    236. stock add_weapon(id, const weapname[], bp_ammo) {
    237.     rg_give_item(id, weapname, GT_REPLACE);
    238.     new weaponid = rg_get_weapon_info(weapname, WI_ID);
    239.     rg_set_user_bpammo(id, WeaponIdType:weaponid, bp_ammo);
    240. }
    241.  
    242. public Sec_WeaponMenuHandler(id, iMenu, iItem) {
    243.     if(iItem == MENU_EXIT) return PLUGIN_HANDLED;
    244.  
    245.     new szNum[3], iAccess, cb;
    246.     menu_item_getinfo(iMenu, iItem, iAccess, szNum, charsmax(szNum), _, _, cb);
    247.  
    248.     new iItemIndex = str_to_num(szNum);
    249.     new menudata[weapinfo];
    250.    
    251.     ArrayGetArray(g_Secondary_MenuItems, iItemIndex, menudata);
    252.    
    253.     add_weapon(id, menudata[weap_name], menudata[bpammo]);
    254.    
    255.     return PLUGIN_HANDLED;
    256. }
    257.  
    258. public Event_NewRound() {
    259.     arrayset(g_Used, false, sizeof(g_Used));
    260.     arrayset(g_Awps, 0, sizeof(g_Awps));
    261.     g_AWPCvarHook[MinPlayers] = get_pcvar_num(g_Cvars[AwpMinPlayers]);
    262.     g_AllowAWP = (get_member_game(m_iNumTerrorist) >= g_AWPCvarHook[MinPlayers] && get_member_game(m_iNumCT) >= g_AWPCvarHook[MinPlayers]) ? true : false;
    263.     g_Grenades[HE] = get_pcvar_num(g_Cvars[MaxHeg]);
    264.     g_Grenades[FLASH] = get_pcvar_num(g_Cvars[MaxFlash]);
    265.     g_Grenades[SMOKE] = get_pcvar_num(g_Cvars[MaxSmoke]);
    266.     g_AWPCvarHook[MaxAwp] = get_pcvar_num(g_Cvars[MaxAwps]);
    267. }
    268.  
    269. public weapmenu(id) {
    270.     if (!is_user_alive(id) || g_Used[id]) return;
    271.    
    272.     menu_display(id, g_iPrim_EquipMenuID, 0);
    273. }
    274.  
    275. give_grenades(id) {
    276.     if(g_Grenades[HE])
    277.         add_weapon(id, "weapon_hegrenade", g_Grenades[HE]);
    278.  
    279.     if(g_Grenades[FLASH])
    280.         add_weapon(id, "weapon_flashbang", g_Grenades[FLASH]);
    281.  
    282.     if(g_Grenades[SMOKE])
    283.         add_weapon(id, "weapon_smokegrenade", g_Grenades[SMOKE]);
    284. }
    285.  
    286. public Event_ResetHUD(id) {
    287.     set_member(id, m_iClientHideHUD, 0)
    288.     set_member(id, m_iHideHUD, HUD_HIDE_MONEY)
    289. }
    290.  
    291. public Event_HideWeapon(id) {
    292.     // for compatibility with other plugins using that message; ZP for example
    293.     new iFlags = read_data(1)
    294.     if(~iFlags & HUD_HIDE_MONEY) {
    295.         set_member(id, m_iClientHideHUD, 0)
    296.         set_member(id, m_iHideHUD, iFlags|HUD_HIDE_MONEY)
    297.     }
    298. }
    299.  
    300. public plugin_end() {
    301.     ArrayDestroy(g_Primary_MenuItems);
    302.     ArrayDestroy(g_Secondary_MenuItems);
    303. }

    Reapi verziónál csak füstöt ad, hiába van beállítva :)

    Szerző:  mforce [ 2016.07.02. 20:44 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Reapi verzió.
    Tesztelve!
    https://github.com/mforce95/Reapi_AMXX_ ... pon%20Menu

    Szerző:  ksslszl [ 2016.07.03. 02:39 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Nem tudom átalakítani


    AMX Mod X Compiler 1.8.3-manual
    Copyright (c) 1997-2006 ITB CompuPhase
    Copyright (c) 2004-2013 AMX Mod X Team

    Modified for http://www.Freakz.ro / amx.freakz.ro

    amxmodx-25268-extended_weapon_menu.sma(200) : error 017: undefined symbol "client_print_color"
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : warning 215: expression has no effect
    amxmodx-25268-extended_weapon_menu.sma(200) : error 001: expected token: ";", but found ")"
    amxmodx-25268-extended_weapon_menu.sma(200) : error 029: invalid expression, assumed zero
    amxmodx-25268-extended_weapon_menu.sma(200) : fatal error 107: too many error messages on one line

    Compilation aborted.
    4 Errors.
    Done.

    Szerző:  mforce [ 2016.07.03. 07:35 ]
    Hozzászólás témája:  Re: Extended Weapon Menu

    Hát online compilerrel nem is fogod :)

    Oldal: 1 / 4 Minden időpont UTC+02:00 időzóna szerinti
    Powered by phpBB® Forum Software © phpBB Limited
    https://www.phpbb.com/