Weapon menu !

Coding Help/Re-API Supported
Post Reply
User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

Weapon menu !

#1

Post by Luxurious » 5 years ago

Can Anyone Help me !!

Code: Select all

#include <zombie_escape>
#include <ze_levels>
 
native give_golden_m3(id);
native give_golden_mp5(id);
native give_golden_m4a1(id);
native give_golden_ak47(id);
native ze_giveminigun(id);
native give_thantos5(id);
native give_frost_m4a1(id);
native give_weapon_m32(id);

 
// Setting File
new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
 
// Keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const OFFSET_CSMENUCODE = 205
 
// Primary Weapons Entities [Default Values]
new const szPrimaryWeaponEnt[][] =
{
    "weapon_xm1014",  // Level 0
    "weapon_ump45",   // Level 0
    "weapon_m3",      // Level 1
    "weapon_mp5navy", // Level 2
    "weapon_p90",     // Level 3
    "weapon_galil",   // Level 4
    "weapon_famas",   // Level 5
    "weapon_sg550",   // Level 6
    "weapon_g3sg1",   // Level 7
    "weapon_m249",    // Level 8
    "weapon_sg552",   // Level 9
    "weapon_aug",     // Level 10
    "weapon_m4a1",    // Level 11
    "weapon_ak47"     // Level 12
}
 
// Secondary Weapons Entities [Default Values]
new const szSecondaryWeaponEnt[][]=
{
    "weapon_usp",         // Level 0
    "weapon_p228",        // Level 0
    "weapon_glock18",     // Level 1
    "weapon_fiveseven",   // Level 2
    "weapon_deagle",      // Level 3
    "weapon_elite"        // Level 4
}
 
// Primary and Secondary Weapons Names [Default Values]
new const szWeaponNames[][] =
{
    "",
    "P228",
    "",
    "Scout",
    "HE Grenade",
    "XM1014",
    "",
    "MAC-10",
    "AUG",
    "Smoke Grenade",
    "Dual Elite",
    "Five Seven",
    "UMP 45",
    "SG-550",
    "Galil",
    "Famas",
    "USP",
    "Glock",
    "AWP",
    "MP5",
    "M249",
    "M3",
    "M4A1",
    "TMP",
    "G3SG1",
    "Flashbang",
    "Desert Eagle",
    "SG-552",
    "AK-47",
    "",
    "P90"
}
 
// Max Back Clip Ammo (Change it From here if you need)
new const szMaxBPAmmo[] =
{
    -1,
    200,
    -1,
    200,
    1,
    200,
    1,
    200,
    200,
    1,
    200,
    200,
    200,
    200,
    200,
    200,
    200,
    200,
    200,
    200,
    200,
    32,
    200,
    200,
    200,
    2,
    200,
    200,
    200,
    -1,
    200
}
 
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
 
// Variables
new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
 
new g_iMenuData[33][4],
    Float:g_fBuyTimeStart[33],
    bool:g_bBoughtPrimary[33],
    bool:g_bBoughtSecondary[33],
    WPN_MAXIDS[33]
 
// Define
#define WPN_STARTID g_iMenuData[id][0]
#define WPN_SELECTION (g_iMenuData[id][0]+key)
#define WPN_AUTO_ON g_iMenuData[id][1]
#define WPN_AUTO_PRI g_iMenuData[id][2]
#define WPN_AUTO_SEC g_iMenuData[id][3]
 
// Cvars
new g_pCvarBuyTime,
    g_pCvarHeGrenade,
    g_pCvarSmokeGrenade,
    g_pCvarFlashGrenade,
    g_pCvarBlockWeapLowLevel
 
public plugin_natives()
{
    register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
    register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
    register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
}
 
public plugin_precache()
{
    // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
    g_szPrimaryWeapons = ArrayCreate(32, 1)
    g_szSecondaryWeapons = ArrayCreate(32, 1)
   
    // Load from external file
    amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
    amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
   
    // If we couldn't load from file, use and save default ones
   
    new iIndex
   
    if (ArraySize(g_szPrimaryWeapons) == 0)
    {
        for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
            ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
       
        // If not found .ini File Create it and save default values in it
        amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
    }
   
    if (ArraySize(g_szSecondaryWeapons) == 0)
    {
        for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
            ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
       
        // If not found .ini File Create it and save default values in it
        amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
    }
}
 
public plugin_init()
{
    register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
   
    // Commands
    register_clcmd("guns", "Cmd_Buy")
    register_clcmd("say /enable", "Cmd_Enable")
    register_clcmd("say_team /enable", "Cmd_Enable")
   
    // Cvars
    g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
    g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
    g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
    g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
    g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
   
    // Menus
    register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
    register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
   
    // Hams
    RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
    RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
}
 
public client_disconnected(id)
{
    WPN_AUTO_ON = 0
    WPN_STARTID = 0
}
 
public Cmd_Enable(id)
{
    if (WPN_AUTO_ON)
    {
        ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
        WPN_AUTO_ON = 0
    }
}
 
public Cmd_Buy(id)
{
    // Player Zombie
    if (ze_is_user_zombie(id))
    {
        ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
        return
    }
   
    // Player Dead
    if (!is_user_alive(id))
    {
        ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
        return
    }
   
    // Already bought
    if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
    {
        ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
    }
   
    Show_Available_Buy_Menus(id)
}
 
public ze_user_humanized(id)
{
    // Static Values
    switch (ze_get_user_level(id))
    {
        case 0: WPN_MAXIDS[id] = 2
        case 1: WPN_MAXIDS[id] = 3
        case 2: WPN_MAXIDS[id] = 4
        case 3: WPN_MAXIDS[id] = 5
        case 4: WPN_MAXIDS[id] = 6
        case 5: WPN_MAXIDS[id] = 7
        case 6: WPN_MAXIDS[id] = 8
        case 7: WPN_MAXIDS[id] = 9
        case 8: WPN_MAXIDS[id] = 10
        case 9: WPN_MAXIDS[id] = 11
        case 10: WPN_MAXIDS[id] = 12
        case 11: WPN_MAXIDS[id] = 13
        case 12..14: WPN_MAXIDS[id] = 14
        case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
        case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
        case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
        case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
        case 35: WPN_MAXIDS[id] = 19   // M32
    }
   
    if (ze_get_user_level(id) > 35)
    {
        WPN_MAXIDS[id] = 19
    }
 
    // Buyzone time starts when player is set to human
    g_fBuyTimeStart[id] = get_gametime()
   
    g_bBoughtPrimary[id] = false
    g_bBoughtSecondary[id] = false
   
    // Player dead or zombie
    if (!is_user_alive(id) || ze_is_user_zombie(id))
        return
   
    if (WPN_AUTO_ON)
    {
        ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
        Buy_Primary_Weapon(id, WPN_AUTO_PRI)
        Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
    }
   
    // Open available buy menus
    Show_Available_Buy_Menus(id)
   
    // Give HE Grenade
    if (get_pcvar_num(g_pCvarHeGrenade) != 0)
        rg_give_item(id, "weapon_hegrenade")
   
    // Give Smoke Grenade
    if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
        rg_give_item(id, "weapon_smokegrenade")
   
    // Give Flashbang Grenade
    if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
        rg_give_item(id, "weapon_flashbang")
}
 
public Show_Available_Buy_Menus(id)
{
    // Already Bought
    if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
        return
   
    // Here we use if and else if so we make sure that Primary weapon come first then secondary
    if (!g_bBoughtPrimary[id])
    {
        // Primary     
        Show_Menu_Buy_Primary(id)
    }
    else if (!g_bBoughtSecondary[id])
    {
        // Secondary
        Show_Menu_Buy_Secondary(id)
    }
}
 
public Show_Menu_Buy_Primary(id)
{
    new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
    if (iMenuTime <= 0)
    {
        ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
        return
    }
   
    static szMenu[300], szWeaponName[32]
    new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
   
    // Title
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
   
    // 1-7. Weapon List
    for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
    {
        if (ze_get_user_level(id) == 0 && iIndex >= 2||
        ze_get_user_level(id) == 1 && iIndex >= 3 ||
        ze_get_user_level(id) == 2 && iIndex >= 4 ||
        ze_get_user_level(id) == 3 && iIndex >= 5 ||
        ze_get_user_level(id) == 4 && iIndex >= 6 ||
        ze_get_user_level(id) == 5 && iIndex >= 7 ||
        ze_get_user_level(id) == 6 && iIndex >= 8 ||
        ze_get_user_level(id) == 7 && iIndex >= 9 ||
        ze_get_user_level(id) == 8 && iIndex >= 10 ||
        ze_get_user_level(id) == 9 && iIndex >= 11 ||
        ze_get_user_level(id) == 10 && iIndex >= 12 ||
        ze_get_user_level(id) == 11 && iIndex >= 13 ||
        ze_get_user_level(id) == 12 && iIndex >= 14)
        {
            break
        }
       
        /*
        *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
        */
       
        // Golden M3
        if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
        {
            if (iIndex == 14)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
                break;
            }
        }
       
        // Golden MP5
        if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
        {
            if (iIndex == 14)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
            }
           
            if (iIndex == 15)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
                break;
            }
        }
       
        // Golden M4A1
        if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
        {
            if (iIndex == 14)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
            }
           
            if (iIndex == 15)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
            }
           
            if (iIndex == 16)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
                break;
            }
        }
       
        // Golden AK47
        if (ze_get_user_level(id) >= 30)
        {
            if (iIndex == 14)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
            }
           
            if (iIndex == 15)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
            }
           
            if (iIndex == 16)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
            }
           
            if (iIndex == 17)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
                break;
            }
            }
           
            if (iIndex == 18)
            {
                iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
                break;
            }
        }
       
        // Must check if iIndex < 14 means max is AK47
        if (iIndex < 14)
        {
            ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
        }
    }
   
    if (iIndex < 7)
    {
        ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
   
    if (ze_get_user_level(id) == 5)
    {
        ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 6)
    {
        ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 7)
    {
        ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 8)
    {
        ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 9)
    {
        ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 10)
    {
        ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) == 11)
    {
        ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
    }
    else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
    }
    else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
    }
    else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
    }
    else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
    }
    else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
    }
    
    
 
    // 8. Auto Select
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
    // 9. Next/Back - 0. Exit
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
   
    // Fix for AMXX custom menus
    set_pdata_int(id, OFFSET_CSMENUCODE, 0)
    show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
}
 
public Show_Menu_Buy_Secondary(id)
{
    new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
    if (iMenuTime <= 0)
    {
        ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
        return
    }
   
    static szMenu[250], szWeaponName[32]
    new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
   
    // Title
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
   
    // 1-6. Weapon List
    for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
    {
        if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
        ze_get_user_level(id) == 1 && iIndex >= 3 ||
        ze_get_user_level(id) == 2 && iIndex >= 4 ||
        ze_get_user_level(id) == 3 && iIndex >= 5 ||
        ze_get_user_level(id) == 4 && iIndex >= 6)
        {
            break
        }
       
        ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
    }
   
    if (iIndex < ArraySize(g_szSecondaryWeapons))
    {
        ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
    }
   
    // 8. Auto Select
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
    // 0. Exit
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
   
    // Fix for AMXX custom menus
    set_pdata_int(id, OFFSET_CSMENUCODE, 0)
    show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
}
 
public Menu_Buy_Primary(id, key)
{
    // Player dead or zombie or already bought primary
    if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
        return PLUGIN_HANDLED
   
    // Special keys / weapon list exceeded
    if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
    {
        switch (key)
        {
            case MENU_KEY_AUTOSELECT: // toggle auto select
            {
                WPN_AUTO_ON = 1 - WPN_AUTO_ON
            }
            case MENU_KEY_NEXT: // next/back
            {
                if (WPN_STARTID+7 < WPN_MAXIDS[id])
                    WPN_STARTID += 7
                else
                    WPN_STARTID = 0
            }
            case MENU_KEY_EXIT: // exit
            {
                return PLUGIN_HANDLED
            }
        }
       
        // Show buy menu again
        Show_Menu_Buy_Primary(id)
        return PLUGIN_HANDLED
    }
   
    // Store selected weapon id
    WPN_AUTO_PRI = WPN_SELECTION
   
    // Buy primary weapon
    Buy_Primary_Weapon(id, WPN_AUTO_PRI)
   
    // Show Secondary Weapons
    Show_Available_Buy_Menus(id)
   
    return PLUGIN_HANDLED
}
 
public Buy_Primary_Weapon(id, selection)
{
    if (selection == 14) // Frost M4A1
    {
        give_frost_m4a1(id)
        g_bBoughtPrimary[id] = true
        return true;
    }
    else if (selection == 15) // Golden MP5
    {
        give_golden_mp5(id)
        g_bBoughtPrimary[id] = true
        return true;
    }
    else if (selection == 16) // Golden M4A1
    {
        give_golden_m4a1(id)
        g_bBoughtPrimary[id] = true
        return true;
    }
    else if (selection == 17) // Thantos-5
    {
        give_thantos5(id)
        g_bBoughtPrimary[id] = true
        return true;
    }
    else if (selection == 18) // M32
    {
        give_weapon_m32(id)
        g_bBoughtPrimary[id] = true
        return true;
    }   
   
    static szWeaponName[32]
    ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
    new iWeaponId = get_weaponid(szWeaponName)
   
    // Strip and Give Full Weapon
    rg_give_item(id, szWeaponName, GT_REPLACE)
    rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
   
    // Primary bought
    g_bBoughtPrimary[id] = true
    return true;
}
 
public Menu_Buy_Secondary(id, key)
{
    // Player dead or zombie or already bought secondary
    if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
        return PLUGIN_HANDLED
   
    // Special keys / weapon list exceeded
    if (key >= ArraySize(g_szSecondaryWeapons))
    {
        // Toggle autoselect
        if (key == MENU_KEY_AUTOSELECT)
            WPN_AUTO_ON = 1 - WPN_AUTO_ON
       
        // Reshow menu unless user exited
        if (key != MENU_KEY_EXIT)
            Show_Menu_Buy_Secondary(id)
       
        return PLUGIN_HANDLED
    }
   
    // Store selected weapon id
    WPN_AUTO_SEC = key
   
    // Buy secondary weapon
    Buy_Secondary_Weapon(id, key)
   
    return PLUGIN_HANDLED
}
 
public Buy_Secondary_Weapon(id, selection)
{
    if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
    ((selection == 3) && (ze_get_user_level(id) < 2)) ||
    ((selection == 4) && (ze_get_user_level(id) < 3)) ||
    ((selection == 5) && (ze_get_user_level(id) < 4)) )
    {
        Show_Menu_Buy_Secondary(id)
        return;
    }
 
    static szWeaponName[32]
    ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
    new iWeaponId = get_weaponid(szWeaponName)
   
    // Strip and Give Full Weapon
    rg_give_item(id, szWeaponName, GT_REPLACE)
    rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
    ze_giveminigun(id)
 
   
    // Secondary bought
    g_bBoughtSecondary[id] = true
}
 
public Fw_TouchWeapon_Pre(iEnt, id)
{
    if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
        return HAM_IGNORED;
   
    // Not alive or Not Valid Weapon?
    if(!is_user_alive(id) || !pev_valid(iEnt))
        return HAM_IGNORED;
   
    // Get Weapon Model
    new szWeapModel[32]
    pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
   
    // Remove "models/w_" and ".mdl"
    copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
   
    // Set for mp5 to be same as "weapon_mp5navy"
    if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
        szWeapModel = "mp5navy"
   
    // Add "weapon_" to all model names
    static szWeaponEnt[32]
    formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
 
    // Get it's index in Weapon Array
    new iIndex, i
   
    // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
    for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
    {
        new szPrimaryWeapon[32]
        ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
       
        if (equali(szWeaponEnt, szPrimaryWeapon))
            iIndex = i
    }
   
    if (ze_get_user_level(id) == 0 && iIndex > 1)
    {
        return HAM_SUPERCEDE;
    }
   
    for (i = 1; i <= 11; i++)
    {
        if ((ze_get_user_level(id) == i) && iIndex > i+1)
        {
            return HAM_SUPERCEDE;
        }
    }
   
    return HAM_IGNORED;
}
 
// Natives
public native_ze_show_weapon_menu(id)
{
    if (!is_user_connected(id))
    {
        log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
        return false
    }
   
    Cmd_Buy(id)
    return true
}
 
public native_ze_is_auto_buy_enabled(id)
{
    if (!is_user_connected(id))
    {
        log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
        return -1;
    }
   
    return WPN_AUTO_ON;
}
 
public native_ze_disable_auto_buy(id)
{
    if (!is_user_connected(id))
    {
        log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
        return false
    }
   
    WPN_AUTO_ON = 0;
    return true
}
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#2

Post by Night Fury » 5 years ago

What is the problem?
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#3

Post by Luxurious » 5 years ago

Jack GamePlay wrote: 5 years ago What is the problem?
  • //
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(449) : warning 217: loose indentation
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(457) : warning 217: loose indentation
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(464) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(470) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(475) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(480) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(485) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(490) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(495) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(500) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(505) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(509) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(513) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(517) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(521) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(529) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(532) : error 010: invalid function or declaration
    // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v 1.8.3\ze_weapon_menu1.sma(535) : error 021: symbol already defined: "set_pdata_int"
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#4

Post by Night Fury » 5 years ago

Code: Select all

#include <zombie_escape>
#include <ze_levels>
 
native give_golden_m3(id);
native give_golden_mp5(id);
native give_golden_m4a1(id);
native give_golden_ak47(id);
native ze_giveminigun(id);
native give_thantos5(id);
native give_frost_m4a1(id);
native give_weapon_m32(id);

 
// Setting File
new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
 
// Keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const OFFSET_CSMENUCODE = 205
 
// Primary Weapons Entities [Default Values]
new const szPrimaryWeaponEnt[][] =
{
	"weapon_xm1014",  // Level 0
	"weapon_ump45",   // Level 0
	"weapon_m3",      // Level 1
	"weapon_mp5navy", // Level 2
	"weapon_p90",     // Level 3
	"weapon_galil",   // Level 4
	"weapon_famas",   // Level 5
	"weapon_sg550",   // Level 6
	"weapon_g3sg1",   // Level 7
	"weapon_m249",    // Level 8
	"weapon_sg552",   // Level 9
	"weapon_aug",     // Level 10
	"weapon_m4a1",    // Level 11
	"weapon_ak47"     // Level 12
}
 
// Secondary Weapons Entities [Default Values]
new const szSecondaryWeaponEnt[][]=
{
	"weapon_usp",         // Level 0
	"weapon_p228",        // Level 0
	"weapon_glock18",     // Level 1
	"weapon_fiveseven",   // Level 2
	"weapon_deagle",      // Level 3
	"weapon_elite"        // Level 4
}
 
// Primary and Secondary Weapons Names [Default Values]
new const szWeaponNames[][] =
{
	"",
	"P228",
	"",
	"Scout",
	"HE Grenade",
	"XM1014",
	"",
	"MAC-10",
	"AUG",
	"Smoke Grenade",
	"Dual Elite",
	"Five Seven",
	"UMP 45",
	"SG-550",
	"Galil",
	"Famas",
	"USP",
	"Glock",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"Flashbang",
	"Desert Eagle",
	"SG-552",
	"AK-47",
	"",
	"P90"
}
 
// Max Back Clip Ammo (Change it From here if you need)
new const szMaxBPAmmo[] =
{
	-1,
	200,
	-1,
	200,
	1,
	200,
	1,
	200,
	200,
	1,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	32,
	200,
	200,
	200,
	2,
	200,
	200,
	200,
	-1,
	200
}
 
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
 
// Variables
new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
 
new g_iMenuData[33][4],
	Float:g_fBuyTimeStart[33],
	bool:g_bBoughtPrimary[33],
	bool:g_bBoughtSecondary[33],
	WPN_MAXIDS[33]
 
// Define
#define WPN_STARTID g_iMenuData[id][0]
#define WPN_SELECTION (g_iMenuData[id][0]+key)
#define WPN_AUTO_ON g_iMenuData[id][1]
#define WPN_AUTO_PRI g_iMenuData[id][2]
#define WPN_AUTO_SEC g_iMenuData[id][3]
 
// Cvars
new g_pCvarBuyTime,
	g_pCvarHeGrenade,
	g_pCvarSmokeGrenade,
	g_pCvarFlashGrenade,
	g_pCvarBlockWeapLowLevel
 
public plugin_natives()
{
	register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
	register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
	register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
}
 
public plugin_precache()
{
	// Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
	g_szPrimaryWeapons = ArrayCreate(32, 1)
	g_szSecondaryWeapons = ArrayCreate(32, 1)
   
	// Load from external file
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
   
	// If we couldn't load from file, use and save default ones
   
	new iIndex
   
	if (ArraySize(g_szPrimaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
			ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	}
   
	if (ArraySize(g_szSecondaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
			ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
	}
}
 
public plugin_init()
{
	register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
   
	// Commands
	register_clcmd("guns", "Cmd_Buy")
	register_clcmd("say /enable", "Cmd_Enable")
	register_clcmd("say_team /enable", "Cmd_Enable")
   
	// Cvars
	g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
	g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
	g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
	g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
	g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
   
	// Menus
	register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
	register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
   
	// Hams
	RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
	RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
}
 
public client_disconnected(id)
{
	WPN_AUTO_ON = 0
	WPN_STARTID = 0
}
 
public Cmd_Enable(id)
{
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
		WPN_AUTO_ON = 0
	}
}
 
public Cmd_Buy(id)
{
	// Player Zombie
	if (ze_is_user_zombie(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
		return
	}
   
	// Player Dead
	if (!is_user_alive(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
		return
	}
   
	// Already bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
	}
   
	Show_Available_Buy_Menus(id)
}
 
public ze_user_humanized(id)
{
	// Static Values
	switch (ze_get_user_level(id))
	{
		case 0: WPN_MAXIDS[id] = 2
		case 1: WPN_MAXIDS[id] = 3
		case 2: WPN_MAXIDS[id] = 4
		case 3: WPN_MAXIDS[id] = 5
		case 4: WPN_MAXIDS[id] = 6
		case 5: WPN_MAXIDS[id] = 7
		case 6: WPN_MAXIDS[id] = 8
		case 7: WPN_MAXIDS[id] = 9
		case 8: WPN_MAXIDS[id] = 10
		case 9: WPN_MAXIDS[id] = 11
		case 10: WPN_MAXIDS[id] = 12
		case 11: WPN_MAXIDS[id] = 13
		case 12..14: WPN_MAXIDS[id] = 14
		case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
		case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
		case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
		case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
		case 35: WPN_MAXIDS[id] = 19   // M32
	}
   
	if (ze_get_user_level(id) > 35)
	{
		WPN_MAXIDS[id] = 19
	}
 
	// Buyzone time starts when player is set to human
	g_fBuyTimeStart[id] = get_gametime()
   
	g_bBoughtPrimary[id] = false
	g_bBoughtSecondary[id] = false
   
	// Player dead or zombie
	if (!is_user_alive(id) || ze_is_user_zombie(id))
		return
   
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
		Buy_Primary_Weapon(id, WPN_AUTO_PRI)
		Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
	}
   
	// Open available buy menus
	Show_Available_Buy_Menus(id)
   
	// Give HE Grenade
	if (get_pcvar_num(g_pCvarHeGrenade) != 0)
		rg_give_item(id, "weapon_hegrenade")
   
	// Give Smoke Grenade
	if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
		rg_give_item(id, "weapon_smokegrenade")
   
	// Give Flashbang Grenade
	if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
		rg_give_item(id, "weapon_flashbang")
}
 
public Show_Available_Buy_Menus(id)
{
	// Already Bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
		return
   
	// Here we use if and else if so we make sure that Primary weapon come first then secondary
	if (!g_bBoughtPrimary[id])
	{
		// Primary     
		Show_Menu_Buy_Primary(id)
	}
	else if (!g_bBoughtSecondary[id])
	{
		// Secondary
		Show_Menu_Buy_Secondary(id)
	}
}
 
public Show_Menu_Buy_Primary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[300], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
	
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
	
	// 1-7. Weapon List
	for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6 ||
		ze_get_user_level(id) == 5 && iIndex >= 7 ||
		ze_get_user_level(id) == 6 && iIndex >= 8 ||
		ze_get_user_level(id) == 7 && iIndex >= 9 ||
		ze_get_user_level(id) == 8 && iIndex >= 10 ||
		ze_get_user_level(id) == 9 && iIndex >= 11 ||
		ze_get_user_level(id) == 10 && iIndex >= 12 ||
		ze_get_user_level(id) == 11 && iIndex >= 13 ||
		ze_get_user_level(id) == 12 && iIndex >= 14)
		{
			break
		}
	   
		/*
		*  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
		*/
	   
		// Golden M3
		if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
				break;
			}
		}
	   
		// Golden MP5
		if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
				break;
			}
		}
	   
		// Golden M4A1
		if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
				break;
			}
		}
	   
		// Golden AK47
		if (ze_get_user_level(id) >= 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
			}
		   
			if (iIndex == 17)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
			}
		}

		if (iIndex == 18)
		{
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
			break;
		}
	   
		// Must check if iIndex < 14 means max is AK47
		if (iIndex < 14)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
		}

		if (iIndex < 7)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
		}
	}
   
	if (ze_get_user_level(id) == 5)
	{
		ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 6)
	{
		ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 7)
	{
		ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 8)
	{
		ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 9)
	{
		ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 10)
	{
		ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 11)
	{
		ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
	}
	else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
	}
	else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
	}
	else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
	}
	else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
	}
	
	
 
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 9. Next/Back - 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
}
 
public Show_Menu_Buy_Secondary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[250], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
   
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
   
	// 1-6. Weapon List
	for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6)
		{
			break
		}
	   
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	if (iIndex < ArraySize(g_szSecondaryWeapons))
	{
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
}
 
public Menu_Buy_Primary(id, key)
{
	// Player dead or zombie or already bought primary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
	{
		switch (key)
		{
			case MENU_KEY_AUTOSELECT: // toggle auto select
			{
				WPN_AUTO_ON = 1 - WPN_AUTO_ON
			}
			case MENU_KEY_NEXT: // next/back
			{
				if (WPN_STARTID+7 < WPN_MAXIDS[id])
					WPN_STARTID += 7
				else
					WPN_STARTID = 0
			}
			case MENU_KEY_EXIT: // exit
			{
				return PLUGIN_HANDLED
			}
		}
	   
		// Show buy menu again
		Show_Menu_Buy_Primary(id)
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_PRI = WPN_SELECTION
   
	// Buy primary weapon
	Buy_Primary_Weapon(id, WPN_AUTO_PRI)
   
	// Show Secondary Weapons
	Show_Available_Buy_Menus(id)
   
	return PLUGIN_HANDLED
}
 
public Buy_Primary_Weapon(id, selection)
{
	if (selection == 14) // Frost M4A1
	{
		give_frost_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 15) // Golden MP5
	{
		give_golden_mp5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 16) // Golden M4A1
	{
		give_golden_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 17) // Thantos-5
	{
		give_thantos5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 18) // M32
	{
		give_weapon_m32(id)
		g_bBoughtPrimary[id] = true
		return true;
	}   
   
	static szWeaponName[32]
	ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
   
	// Primary bought
	g_bBoughtPrimary[id] = true
	return true;
}
 
public Menu_Buy_Secondary(id, key)
{
	// Player dead or zombie or already bought secondary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= ArraySize(g_szSecondaryWeapons))
	{
		// Toggle autoselect
		if (key == MENU_KEY_AUTOSELECT)
			WPN_AUTO_ON = 1 - WPN_AUTO_ON
	   
		// Reshow menu unless user exited
		if (key != MENU_KEY_EXIT)
			Show_Menu_Buy_Secondary(id)
	   
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_SEC = key
   
	// Buy secondary weapon
	Buy_Secondary_Weapon(id, key)
   
	return PLUGIN_HANDLED
}
 
public Buy_Secondary_Weapon(id, selection)
{
	if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
	((selection == 3) && (ze_get_user_level(id) < 2)) ||
	((selection == 4) && (ze_get_user_level(id) < 3)) ||
	((selection == 5) && (ze_get_user_level(id) < 4)) )
	{
		Show_Menu_Buy_Secondary(id)
		return;
	}
 
	static szWeaponName[32]
	ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
	ze_giveminigun(id)
 
   
	// Secondary bought
	g_bBoughtSecondary[id] = true
}
 
public Fw_TouchWeapon_Pre(iEnt, id)
{
	if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
		return HAM_IGNORED;
   
	// Not alive or Not Valid Weapon?
	if(!is_user_alive(id) || !pev_valid(iEnt))
		return HAM_IGNORED;
   
	// Get Weapon Model
	new szWeapModel[32]
	pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
   
	// Remove "models/w_" and ".mdl"
	copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
   
	// Set for mp5 to be same as "weapon_mp5navy"
	if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
		szWeapModel = "mp5navy"
   
	// Add "weapon_" to all model names
	static szWeaponEnt[32]
	formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
 
	// Get it's index in Weapon Array
	new iIndex, i
   
	// I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
	for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
	{
		new szPrimaryWeapon[32]
		ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
	   
		if (equali(szWeaponEnt, szPrimaryWeapon))
			iIndex = i
	}
   
	if (ze_get_user_level(id) == 0 && iIndex > 1)
	{
		return HAM_SUPERCEDE;
	}
   
	for (i = 1; i <= 11; i++)
	{
		if ((ze_get_user_level(id) == i) && iIndex > i+1)
		{
			return HAM_SUPERCEDE;
		}
	}
   
	return HAM_IGNORED;
}
 
// Natives
public native_ze_show_weapon_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	Cmd_Buy(id)
	return true
}
 
public native_ze_is_auto_buy_enabled(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return -1;
	}
   
	return WPN_AUTO_ON;
}
 
public native_ze_disable_auto_buy(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	WPN_AUTO_ON = 0;
	return true
}
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#5

Post by Luxurious » 5 years ago

Why Show Like it ?
Why Show like it ?
Why Show like it ?
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#6

Post by Luxurious » 5 years ago

up..!
Jack GamePlay wrote: 5 years ago

Code: Select all

#include <zombie_escape>
#include <ze_levels>
 
native give_golden_m3(id);
native give_golden_mp5(id);
native give_golden_m4a1(id);
native give_golden_ak47(id);
native ze_giveminigun(id);
native give_thantos5(id);
native give_frost_m4a1(id);
native give_weapon_m32(id);

 
// Setting File
new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
 
// Keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const OFFSET_CSMENUCODE = 205
 
// Primary Weapons Entities [Default Values]
new const szPrimaryWeaponEnt[][] =
{
	"weapon_xm1014",  // Level 0
	"weapon_ump45",   // Level 0
	"weapon_m3",      // Level 1
	"weapon_mp5navy", // Level 2
	"weapon_p90",     // Level 3
	"weapon_galil",   // Level 4
	"weapon_famas",   // Level 5
	"weapon_sg550",   // Level 6
	"weapon_g3sg1",   // Level 7
	"weapon_m249",    // Level 8
	"weapon_sg552",   // Level 9
	"weapon_aug",     // Level 10
	"weapon_m4a1",    // Level 11
	"weapon_ak47"     // Level 12
}
 
// Secondary Weapons Entities [Default Values]
new const szSecondaryWeaponEnt[][]=
{
	"weapon_usp",         // Level 0
	"weapon_p228",        // Level 0
	"weapon_glock18",     // Level 1
	"weapon_fiveseven",   // Level 2
	"weapon_deagle",      // Level 3
	"weapon_elite"        // Level 4
}
 
// Primary and Secondary Weapons Names [Default Values]
new const szWeaponNames[][] =
{
	"",
	"P228",
	"",
	"Scout",
	"HE Grenade",
	"XM1014",
	"",
	"MAC-10",
	"AUG",
	"Smoke Grenade",
	"Dual Elite",
	"Five Seven",
	"UMP 45",
	"SG-550",
	"Galil",
	"Famas",
	"USP",
	"Glock",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"Flashbang",
	"Desert Eagle",
	"SG-552",
	"AK-47",
	"",
	"P90"
}
 
// Max Back Clip Ammo (Change it From here if you need)
new const szMaxBPAmmo[] =
{
	-1,
	200,
	-1,
	200,
	1,
	200,
	1,
	200,
	200,
	1,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	32,
	200,
	200,
	200,
	2,
	200,
	200,
	200,
	-1,
	200
}
 
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
 
// Variables
new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
 
new g_iMenuData[33][4],
	Float:g_fBuyTimeStart[33],
	bool:g_bBoughtPrimary[33],
	bool:g_bBoughtSecondary[33],
	WPN_MAXIDS[33]
 
// Define
#define WPN_STARTID g_iMenuData[id][0]
#define WPN_SELECTION (g_iMenuData[id][0]+key)
#define WPN_AUTO_ON g_iMenuData[id][1]
#define WPN_AUTO_PRI g_iMenuData[id][2]
#define WPN_AUTO_SEC g_iMenuData[id][3]
 
// Cvars
new g_pCvarBuyTime,
	g_pCvarHeGrenade,
	g_pCvarSmokeGrenade,
	g_pCvarFlashGrenade,
	g_pCvarBlockWeapLowLevel
 
public plugin_natives()
{
	register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
	register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
	register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
}
 
public plugin_precache()
{
	// Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
	g_szPrimaryWeapons = ArrayCreate(32, 1)
	g_szSecondaryWeapons = ArrayCreate(32, 1)
   
	// Load from external file
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
   
	// If we couldn't load from file, use and save default ones
   
	new iIndex
   
	if (ArraySize(g_szPrimaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
			ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	}
   
	if (ArraySize(g_szSecondaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
			ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
	}
}
 
public plugin_init()
{
	register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
   
	// Commands
	register_clcmd("guns", "Cmd_Buy")
	register_clcmd("say /enable", "Cmd_Enable")
	register_clcmd("say_team /enable", "Cmd_Enable")
   
	// Cvars
	g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
	g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
	g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
	g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
	g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
   
	// Menus
	register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
	register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
   
	// Hams
	RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
	RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
}
 
public client_disconnected(id)
{
	WPN_AUTO_ON = 0
	WPN_STARTID = 0
}
 
public Cmd_Enable(id)
{
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
		WPN_AUTO_ON = 0
	}
}
 
public Cmd_Buy(id)
{
	// Player Zombie
	if (ze_is_user_zombie(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
		return
	}
   
	// Player Dead
	if (!is_user_alive(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
		return
	}
   
	// Already bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
	}
   
	Show_Available_Buy_Menus(id)
}
 
public ze_user_humanized(id)
{
	// Static Values
	switch (ze_get_user_level(id))
	{
		case 0: WPN_MAXIDS[id] = 2
		case 1: WPN_MAXIDS[id] = 3
		case 2: WPN_MAXIDS[id] = 4
		case 3: WPN_MAXIDS[id] = 5
		case 4: WPN_MAXIDS[id] = 6
		case 5: WPN_MAXIDS[id] = 7
		case 6: WPN_MAXIDS[id] = 8
		case 7: WPN_MAXIDS[id] = 9
		case 8: WPN_MAXIDS[id] = 10
		case 9: WPN_MAXIDS[id] = 11
		case 10: WPN_MAXIDS[id] = 12
		case 11: WPN_MAXIDS[id] = 13
		case 12..14: WPN_MAXIDS[id] = 14
		case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
		case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
		case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
		case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
		case 35: WPN_MAXIDS[id] = 19   // M32
	}
   
	if (ze_get_user_level(id) > 35)
	{
		WPN_MAXIDS[id] = 19
	}
 
	// Buyzone time starts when player is set to human
	g_fBuyTimeStart[id] = get_gametime()
   
	g_bBoughtPrimary[id] = false
	g_bBoughtSecondary[id] = false
   
	// Player dead or zombie
	if (!is_user_alive(id) || ze_is_user_zombie(id))
		return
   
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
		Buy_Primary_Weapon(id, WPN_AUTO_PRI)
		Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
	}
   
	// Open available buy menus
	Show_Available_Buy_Menus(id)
   
	// Give HE Grenade
	if (get_pcvar_num(g_pCvarHeGrenade) != 0)
		rg_give_item(id, "weapon_hegrenade")
   
	// Give Smoke Grenade
	if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
		rg_give_item(id, "weapon_smokegrenade")
   
	// Give Flashbang Grenade
	if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
		rg_give_item(id, "weapon_flashbang")
}
 
public Show_Available_Buy_Menus(id)
{
	// Already Bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
		return
   
	// Here we use if and else if so we make sure that Primary weapon come first then secondary
	if (!g_bBoughtPrimary[id])
	{
		// Primary     
		Show_Menu_Buy_Primary(id)
	}
	else if (!g_bBoughtSecondary[id])
	{
		// Secondary
		Show_Menu_Buy_Secondary(id)
	}
}
 
public Show_Menu_Buy_Primary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[300], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
	
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
	
	// 1-7. Weapon List
	for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6 ||
		ze_get_user_level(id) == 5 && iIndex >= 7 ||
		ze_get_user_level(id) == 6 && iIndex >= 8 ||
		ze_get_user_level(id) == 7 && iIndex >= 9 ||
		ze_get_user_level(id) == 8 && iIndex >= 10 ||
		ze_get_user_level(id) == 9 && iIndex >= 11 ||
		ze_get_user_level(id) == 10 && iIndex >= 12 ||
		ze_get_user_level(id) == 11 && iIndex >= 13 ||
		ze_get_user_level(id) == 12 && iIndex >= 14)
		{
			break
		}
	   
		/*
		*  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
		*/
	   
		// Golden M3
		if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
				break;
			}
		}
	   
		// Golden MP5
		if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
				break;
			}
		}
	   
		// Golden M4A1
		if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
				break;
			}
		}
	   
		// Golden AK47
		if (ze_get_user_level(id) >= 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
			}
		   
			if (iIndex == 17)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
			}
		}

		if (iIndex == 18)
		{
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
			break;
		}
	   
		// Must check if iIndex < 14 means max is AK47
		if (iIndex < 14)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
		}

		if (iIndex < 7)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
		}
	}
   
	if (ze_get_user_level(id) == 5)
	{
		ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 6)
	{
		ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 7)
	{
		ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 8)
	{
		ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 9)
	{
		ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 10)
	{
		ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 11)
	{
		ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
	}
	else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
	}
	else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
	}
	else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
	}
	else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
	}
	
	
 
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 9. Next/Back - 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
}
 
public Show_Menu_Buy_Secondary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[250], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
   
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
   
	// 1-6. Weapon List
	for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6)
		{
			break
		}
	   
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	if (iIndex < ArraySize(g_szSecondaryWeapons))
	{
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
}
 
public Menu_Buy_Primary(id, key)
{
	// Player dead or zombie or already bought primary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
	{
		switch (key)
		{
			case MENU_KEY_AUTOSELECT: // toggle auto select
			{
				WPN_AUTO_ON = 1 - WPN_AUTO_ON
			}
			case MENU_KEY_NEXT: // next/back
			{
				if (WPN_STARTID+7 < WPN_MAXIDS[id])
					WPN_STARTID += 7
				else
					WPN_STARTID = 0
			}
			case MENU_KEY_EXIT: // exit
			{
				return PLUGIN_HANDLED
			}
		}
	   
		// Show buy menu again
		Show_Menu_Buy_Primary(id)
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_PRI = WPN_SELECTION
   
	// Buy primary weapon
	Buy_Primary_Weapon(id, WPN_AUTO_PRI)
   
	// Show Secondary Weapons
	Show_Available_Buy_Menus(id)
   
	return PLUGIN_HANDLED
}
 
public Buy_Primary_Weapon(id, selection)
{
	if (selection == 14) // Frost M4A1
	{
		give_frost_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 15) // Golden MP5
	{
		give_golden_mp5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 16) // Golden M4A1
	{
		give_golden_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 17) // Thantos-5
	{
		give_thantos5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 18) // M32
	{
		give_weapon_m32(id)
		g_bBoughtPrimary[id] = true
		return true;
	}   
   
	static szWeaponName[32]
	ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
   
	// Primary bought
	g_bBoughtPrimary[id] = true
	return true;
}
 
public Menu_Buy_Secondary(id, key)
{
	// Player dead or zombie or already bought secondary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= ArraySize(g_szSecondaryWeapons))
	{
		// Toggle autoselect
		if (key == MENU_KEY_AUTOSELECT)
			WPN_AUTO_ON = 1 - WPN_AUTO_ON
	   
		// Reshow menu unless user exited
		if (key != MENU_KEY_EXIT)
			Show_Menu_Buy_Secondary(id)
	   
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_SEC = key
   
	// Buy secondary weapon
	Buy_Secondary_Weapon(id, key)
   
	return PLUGIN_HANDLED
}
 
public Buy_Secondary_Weapon(id, selection)
{
	if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
	((selection == 3) && (ze_get_user_level(id) < 2)) ||
	((selection == 4) && (ze_get_user_level(id) < 3)) ||
	((selection == 5) && (ze_get_user_level(id) < 4)) )
	{
		Show_Menu_Buy_Secondary(id)
		return;
	}
 
	static szWeaponName[32]
	ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
	ze_giveminigun(id)
 
   
	// Secondary bought
	g_bBoughtSecondary[id] = true
}
 
public Fw_TouchWeapon_Pre(iEnt, id)
{
	if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
		return HAM_IGNORED;
   
	// Not alive or Not Valid Weapon?
	if(!is_user_alive(id) || !pev_valid(iEnt))
		return HAM_IGNORED;
   
	// Get Weapon Model
	new szWeapModel[32]
	pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
   
	// Remove "models/w_" and ".mdl"
	copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
   
	// Set for mp5 to be same as "weapon_mp5navy"
	if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
		szWeapModel = "mp5navy"
   
	// Add "weapon_" to all model names
	static szWeaponEnt[32]
	formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
 
	// Get it's index in Weapon Array
	new iIndex, i
   
	// I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
	for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
	{
		new szPrimaryWeapon[32]
		ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
	   
		if (equali(szWeaponEnt, szPrimaryWeapon))
			iIndex = i
	}
   
	if (ze_get_user_level(id) == 0 && iIndex > 1)
	{
		return HAM_SUPERCEDE;
	}
   
	for (i = 1; i <= 11; i++)
	{
		if ((ze_get_user_level(id) == i) && iIndex > i+1)
		{
			return HAM_SUPERCEDE;
		}
	}
   
	return HAM_IGNORED;
}
 
// Natives
public native_ze_show_weapon_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	Cmd_Buy(id)
	return true
}
 
public native_ze_is_auto_buy_enabled(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return -1;
	}
   
	return WPN_AUTO_ON;
}
 
public native_ze_disable_auto_buy(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	WPN_AUTO_ON = 0;
	return true
}
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#7

Post by Mark » 5 years ago

Luxurious wrote: 5 years ago up..!
Jack GamePlay wrote: 5 years ago

Code: Select all

#include <zombie_escape>
#include <ze_levels>
 
native give_golden_m3(id);
native give_golden_mp5(id);
native give_golden_m4a1(id);
native give_golden_ak47(id);
native ze_giveminigun(id);
native give_thantos5(id);
native give_frost_m4a1(id);
native give_weapon_m32(id);

 
// Setting File
new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
 
// Keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const OFFSET_CSMENUCODE = 205
 
// Primary Weapons Entities [Default Values]
new const szPrimaryWeaponEnt[][] =
{
	"weapon_xm1014",  // Level 0
	"weapon_ump45",   // Level 0
	"weapon_m3",      // Level 1
	"weapon_mp5navy", // Level 2
	"weapon_p90",     // Level 3
	"weapon_galil",   // Level 4
	"weapon_famas",   // Level 5
	"weapon_sg550",   // Level 6
	"weapon_g3sg1",   // Level 7
	"weapon_m249",    // Level 8
	"weapon_sg552",   // Level 9
	"weapon_aug",     // Level 10
	"weapon_m4a1",    // Level 11
	"weapon_ak47"     // Level 12
}
 
// Secondary Weapons Entities [Default Values]
new const szSecondaryWeaponEnt[][]=
{
	"weapon_usp",         // Level 0
	"weapon_p228",        // Level 0
	"weapon_glock18",     // Level 1
	"weapon_fiveseven",   // Level 2
	"weapon_deagle",      // Level 3
	"weapon_elite"        // Level 4
}
 
// Primary and Secondary Weapons Names [Default Values]
new const szWeaponNames[][] =
{
	"",
	"P228",
	"",
	"Scout",
	"HE Grenade",
	"XM1014",
	"",
	"MAC-10",
	"AUG",
	"Smoke Grenade",
	"Dual Elite",
	"Five Seven",
	"UMP 45",
	"SG-550",
	"Galil",
	"Famas",
	"USP",
	"Glock",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"Flashbang",
	"Desert Eagle",
	"SG-552",
	"AK-47",
	"",
	"P90"
}
 
// Max Back Clip Ammo (Change it From here if you need)
new const szMaxBPAmmo[] =
{
	-1,
	200,
	-1,
	200,
	1,
	200,
	1,
	200,
	200,
	1,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	32,
	200,
	200,
	200,
	2,
	200,
	200,
	200,
	-1,
	200
}
 
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
 
// Variables
new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
 
new g_iMenuData[33][4],
	Float:g_fBuyTimeStart[33],
	bool:g_bBoughtPrimary[33],
	bool:g_bBoughtSecondary[33],
	WPN_MAXIDS[33]
 
// Define
#define WPN_STARTID g_iMenuData[id][0]
#define WPN_SELECTION (g_iMenuData[id][0]+key)
#define WPN_AUTO_ON g_iMenuData[id][1]
#define WPN_AUTO_PRI g_iMenuData[id][2]
#define WPN_AUTO_SEC g_iMenuData[id][3]
 
// Cvars
new g_pCvarBuyTime,
	g_pCvarHeGrenade,
	g_pCvarSmokeGrenade,
	g_pCvarFlashGrenade,
	g_pCvarBlockWeapLowLevel
 
public plugin_natives()
{
	register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
	register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
	register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
}
 
public plugin_precache()
{
	// Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
	g_szPrimaryWeapons = ArrayCreate(32, 1)
	g_szSecondaryWeapons = ArrayCreate(32, 1)
   
	// Load from external file
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
   
	// If we couldn't load from file, use and save default ones
   
	new iIndex
   
	if (ArraySize(g_szPrimaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
			ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	}
   
	if (ArraySize(g_szSecondaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
			ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
	}
}
 
public plugin_init()
{
	register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
   
	// Commands
	register_clcmd("guns", "Cmd_Buy")
	register_clcmd("say /enable", "Cmd_Enable")
	register_clcmd("say_team /enable", "Cmd_Enable")
   
	// Cvars
	g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
	g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
	g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
	g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
	g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
   
	// Menus
	register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
	register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
   
	// Hams
	RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
	RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
}
 
public client_disconnected(id)
{
	WPN_AUTO_ON = 0
	WPN_STARTID = 0
}
 
public Cmd_Enable(id)
{
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
		WPN_AUTO_ON = 0
	}
}
 
public Cmd_Buy(id)
{
	// Player Zombie
	if (ze_is_user_zombie(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
		return
	}
   
	// Player Dead
	if (!is_user_alive(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
		return
	}
   
	// Already bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
	}
   
	Show_Available_Buy_Menus(id)
}
 
public ze_user_humanized(id)
{
	// Static Values
	switch (ze_get_user_level(id))
	{
		case 0: WPN_MAXIDS[id] = 2
		case 1: WPN_MAXIDS[id] = 3
		case 2: WPN_MAXIDS[id] = 4
		case 3: WPN_MAXIDS[id] = 5
		case 4: WPN_MAXIDS[id] = 6
		case 5: WPN_MAXIDS[id] = 7
		case 6: WPN_MAXIDS[id] = 8
		case 7: WPN_MAXIDS[id] = 9
		case 8: WPN_MAXIDS[id] = 10
		case 9: WPN_MAXIDS[id] = 11
		case 10: WPN_MAXIDS[id] = 12
		case 11: WPN_MAXIDS[id] = 13
		case 12..14: WPN_MAXIDS[id] = 14
		case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
		case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
		case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
		case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
		case 35: WPN_MAXIDS[id] = 19   // M32
	}
   
	if (ze_get_user_level(id) > 35)
	{
		WPN_MAXIDS[id] = 19
	}
 
	// Buyzone time starts when player is set to human
	g_fBuyTimeStart[id] = get_gametime()
   
	g_bBoughtPrimary[id] = false
	g_bBoughtSecondary[id] = false
   
	// Player dead or zombie
	if (!is_user_alive(id) || ze_is_user_zombie(id))
		return
   
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
		Buy_Primary_Weapon(id, WPN_AUTO_PRI)
		Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
	}
   
	// Open available buy menus
	Show_Available_Buy_Menus(id)
   
	// Give HE Grenade
	if (get_pcvar_num(g_pCvarHeGrenade) != 0)
		rg_give_item(id, "weapon_hegrenade")
   
	// Give Smoke Grenade
	if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
		rg_give_item(id, "weapon_smokegrenade")
   
	// Give Flashbang Grenade
	if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
		rg_give_item(id, "weapon_flashbang")
}
 
public Show_Available_Buy_Menus(id)
{
	// Already Bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
		return
   
	// Here we use if and else if so we make sure that Primary weapon come first then secondary
	if (!g_bBoughtPrimary[id])
	{
		// Primary     
		Show_Menu_Buy_Primary(id)
	}
	else if (!g_bBoughtSecondary[id])
	{
		// Secondary
		Show_Menu_Buy_Secondary(id)
	}
}
 
public Show_Menu_Buy_Primary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[300], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
	
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
	
	// 1-7. Weapon List
	for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6 ||
		ze_get_user_level(id) == 5 && iIndex >= 7 ||
		ze_get_user_level(id) == 6 && iIndex >= 8 ||
		ze_get_user_level(id) == 7 && iIndex >= 9 ||
		ze_get_user_level(id) == 8 && iIndex >= 10 ||
		ze_get_user_level(id) == 9 && iIndex >= 11 ||
		ze_get_user_level(id) == 10 && iIndex >= 12 ||
		ze_get_user_level(id) == 11 && iIndex >= 13 ||
		ze_get_user_level(id) == 12 && iIndex >= 14)
		{
			break
		}
	   
		/*
		*  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
		*/
	   
		// Golden M3
		if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
				break;
			}
		}
	   
		// Golden MP5
		if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
				break;
			}
		}
	   
		// Golden M4A1
		if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
				break;
			}
		}
	   
		// Golden AK47
		if (ze_get_user_level(id) >= 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
			}
		   
			if (iIndex == 17)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
			}
		}

		if (iIndex == 18)
		{
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
			break;
		}
	   
		// Must check if iIndex < 14 means max is AK47
		if (iIndex < 14)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
		}

		if (iIndex < 7)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
		}
	}
   
	if (ze_get_user_level(id) == 5)
	{
		ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 6)
	{
		ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 7)
	{
		ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 8)
	{
		ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 9)
	{
		ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 10)
	{
		ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 11)
	{
		ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
	}
	else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
	}
	else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
	}
	else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
	}
	else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
	}
	
	
 
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 9. Next/Back - 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
}
 
public Show_Menu_Buy_Secondary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[250], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
   
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
   
	// 1-6. Weapon List
	for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6)
		{
			break
		}
	   
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	if (iIndex < ArraySize(g_szSecondaryWeapons))
	{
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
}
 
public Menu_Buy_Primary(id, key)
{
	// Player dead or zombie or already bought primary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
	{
		switch (key)
		{
			case MENU_KEY_AUTOSELECT: // toggle auto select
			{
				WPN_AUTO_ON = 1 - WPN_AUTO_ON
			}
			case MENU_KEY_NEXT: // next/back
			{
				if (WPN_STARTID+7 < WPN_MAXIDS[id])
					WPN_STARTID += 7
				else
					WPN_STARTID = 0
			}
			case MENU_KEY_EXIT: // exit
			{
				return PLUGIN_HANDLED
			}
		}
	   
		// Show buy menu again
		Show_Menu_Buy_Primary(id)
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_PRI = WPN_SELECTION
   
	// Buy primary weapon
	Buy_Primary_Weapon(id, WPN_AUTO_PRI)
   
	// Show Secondary Weapons
	Show_Available_Buy_Menus(id)
   
	return PLUGIN_HANDLED
}
 
public Buy_Primary_Weapon(id, selection)
{
	if (selection == 14) // Frost M4A1
	{
		give_frost_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 15) // Golden MP5
	{
		give_golden_mp5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 16) // Golden M4A1
	{
		give_golden_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 17) // Thantos-5
	{
		give_thantos5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 18) // M32
	{
		give_weapon_m32(id)
		g_bBoughtPrimary[id] = true
		return true;
	}   
   
	static szWeaponName[32]
	ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
   
	// Primary bought
	g_bBoughtPrimary[id] = true
	return true;
}
 
public Menu_Buy_Secondary(id, key)
{
	// Player dead or zombie or already bought secondary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= ArraySize(g_szSecondaryWeapons))
	{
		// Toggle autoselect
		if (key == MENU_KEY_AUTOSELECT)
			WPN_AUTO_ON = 1 - WPN_AUTO_ON
	   
		// Reshow menu unless user exited
		if (key != MENU_KEY_EXIT)
			Show_Menu_Buy_Secondary(id)
	   
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_SEC = key
   
	// Buy secondary weapon
	Buy_Secondary_Weapon(id, key)
   
	return PLUGIN_HANDLED
}
 
public Buy_Secondary_Weapon(id, selection)
{
	if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
	((selection == 3) && (ze_get_user_level(id) < 2)) ||
	((selection == 4) && (ze_get_user_level(id) < 3)) ||
	((selection == 5) && (ze_get_user_level(id) < 4)) )
	{
		Show_Menu_Buy_Secondary(id)
		return;
	}
 
	static szWeaponName[32]
	ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
	ze_giveminigun(id)
 
   
	// Secondary bought
	g_bBoughtSecondary[id] = true
}
 
public Fw_TouchWeapon_Pre(iEnt, id)
{
	if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
		return HAM_IGNORED;
   
	// Not alive or Not Valid Weapon?
	if(!is_user_alive(id) || !pev_valid(iEnt))
		return HAM_IGNORED;
   
	// Get Weapon Model
	new szWeapModel[32]
	pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
   
	// Remove "models/w_" and ".mdl"
	copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
   
	// Set for mp5 to be same as "weapon_mp5navy"
	if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
		szWeapModel = "mp5navy"
   
	// Add "weapon_" to all model names
	static szWeaponEnt[32]
	formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
 
	// Get it's index in Weapon Array
	new iIndex, i
   
	// I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
	for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
	{
		new szPrimaryWeapon[32]
		ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
	   
		if (equali(szWeaponEnt, szPrimaryWeapon))
			iIndex = i
	}
   
	if (ze_get_user_level(id) == 0 && iIndex > 1)
	{
		return HAM_SUPERCEDE;
	}
   
	for (i = 1; i <= 11; i++)
	{
		if ((ze_get_user_level(id) == i) && iIndex > i+1)
		{
			return HAM_SUPERCEDE;
		}
	}
   
	return HAM_IGNORED;
}
 
// Natives
public native_ze_show_weapon_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	Cmd_Buy(id)
	return true
}
 
public native_ze_is_auto_buy_enabled(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return -1;
	}
   
	return WPN_AUTO_ON;
}
 
public native_ze_disable_auto_buy(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	WPN_AUTO_ON = 0;
	return true
}
That is caused by line break to many of these ^n

try this! Post a pic of what it looks like now.....
  1. #include <zombie_escape>
  2. #include <ze_levels>
  3.  
  4. native give_golden_m3(id);
  5. native give_golden_mp5(id);
  6. native give_golden_m4a1(id);
  7. native give_golden_ak47(id);
  8. native ze_giveminigun(id);
  9. native give_thantos5(id);
  10. native give_frost_m4a1(id);
  11. native give_weapon_m32(id);
  12.  
  13.  
  14. // Setting File
  15. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  16.  
  17. // Keys
  18. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  19. const OFFSET_CSMENUCODE = 205
  20.  
  21. // Primary Weapons Entities [Default Values]
  22. new const szPrimaryWeaponEnt[][] =
  23. {
  24.     "weapon_xm1014",  // Level 0
  25.     "weapon_ump45",   // Level 0
  26.     "weapon_m3",      // Level 1
  27.     "weapon_mp5navy", // Level 2
  28.     "weapon_p90",     // Level 3
  29.     "weapon_galil",   // Level 4
  30.     "weapon_famas",   // Level 5
  31.     "weapon_sg550",   // Level 6
  32.     "weapon_g3sg1",   // Level 7
  33.     "weapon_m249",    // Level 8
  34.     "weapon_sg552",   // Level 9
  35.     "weapon_aug",     // Level 10
  36.     "weapon_m4a1",    // Level 11
  37.     "weapon_ak47"     // Level 12
  38. }
  39.  
  40. // Secondary Weapons Entities [Default Values]
  41. new const szSecondaryWeaponEnt[][]=
  42. {
  43.     "weapon_usp",         // Level 0
  44.     "weapon_p228",        // Level 0
  45.     "weapon_glock18",     // Level 1
  46.     "weapon_fiveseven",   // Level 2
  47.     "weapon_deagle",      // Level 3
  48.     "weapon_elite"        // Level 4
  49. }
  50.  
  51. // Primary and Secondary Weapons Names [Default Values]
  52. new const szWeaponNames[][] =
  53. {
  54.     "",
  55.     "P228",
  56.     "",
  57.     "Scout",
  58.     "HE Grenade",
  59.     "XM1014",
  60.     "",
  61.     "MAC-10",
  62.     "AUG",
  63.     "Smoke Grenade",
  64.     "Dual Elite",
  65.     "Five Seven",
  66.     "UMP 45",
  67.     "SG-550",
  68.     "Galil",
  69.     "Famas",
  70.     "USP",
  71.     "Glock",
  72.     "AWP",
  73.     "MP5",
  74.     "M249",
  75.     "M3",
  76.     "M4A1",
  77.     "TMP",
  78.     "G3SG1",
  79.     "Flashbang",
  80.     "Desert Eagle",
  81.     "SG-552",
  82.     "AK-47",
  83.     "",
  84.     "P90"
  85. }
  86.  
  87. // Max Back Clip Ammo (Change it From here if you need)
  88. new const szMaxBPAmmo[] =
  89. {
  90.     -1,
  91.     200,
  92.     -1,
  93.     200,
  94.     1,
  95.     200,
  96.     1,
  97.     200,
  98.     200,
  99.     1,
  100.     200,
  101.     200,
  102.     200,
  103.     200,
  104.     200,
  105.     200,
  106.     200,
  107.     200,
  108.     200,
  109.     200,
  110.     200,
  111.     32,
  112.     200,
  113.     200,
  114.     200,
  115.     2,
  116.     200,
  117.     200,
  118.     200,
  119.     -1,
  120.     200
  121. }
  122.  
  123. // Menu selections
  124. const MENU_KEY_AUTOSELECT = 7
  125. const MENU_KEY_BACK = 7
  126. const MENU_KEY_NEXT = 8
  127. const MENU_KEY_EXIT = 9
  128.  
  129. // Variables
  130. new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
  131.  
  132. new g_iMenuData[33][4],
  133.     Float:g_fBuyTimeStart[33],
  134.     bool:g_bBoughtPrimary[33],
  135.     bool:g_bBoughtSecondary[33],
  136.     WPN_MAXIDS[33]
  137.  
  138. // Define
  139. #define WPN_STARTID g_iMenuData[id][0]
  140. #define WPN_SELECTION (g_iMenuData[id][0]+key)
  141. #define WPN_AUTO_ON g_iMenuData[id][1]
  142. #define WPN_AUTO_PRI g_iMenuData[id][2]
  143. #define WPN_AUTO_SEC g_iMenuData[id][3]
  144.  
  145. // Cvars
  146. new g_pCvarBuyTime,
  147.     g_pCvarHeGrenade,
  148.     g_pCvarSmokeGrenade,
  149.     g_pCvarFlashGrenade,
  150.     g_pCvarBlockWeapLowLevel
  151.  
  152. public plugin_natives()
  153. {
  154.     register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
  155.     register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
  156.     register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
  157. }
  158.  
  159. public plugin_precache()
  160. {
  161.     // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
  162.     g_szPrimaryWeapons = ArrayCreate(32, 1)
  163.     g_szSecondaryWeapons = ArrayCreate(32, 1)
  164.    
  165.     // Load from external file
  166.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  167.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  168.    
  169.     // If we couldn't load from file, use and save default ones
  170.    
  171.     new iIndex
  172.    
  173.     if (ArraySize(g_szPrimaryWeapons) == 0)
  174.     {
  175.         for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
  176.             ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
  177.        
  178.         // If not found .ini File Create it and save default values in it
  179.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  180.     }
  181.    
  182.     if (ArraySize(g_szSecondaryWeapons) == 0)
  183.     {
  184.         for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
  185.             ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
  186.        
  187.         // If not found .ini File Create it and save default values in it
  188.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  189.     }
  190. }
  191.  
  192. public plugin_init()
  193. {
  194.     register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
  195.    
  196.     // Commands
  197.     register_clcmd("guns", "Cmd_Buy")
  198.     register_clcmd("say /enable", "Cmd_Enable")
  199.     register_clcmd("say_team /enable", "Cmd_Enable")
  200.    
  201.     // Cvars
  202.     g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
  203.     g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
  204.     g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
  205.     g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
  206.     g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
  207.    
  208.     // Menus
  209.     register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
  210.     register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
  211.    
  212.     // Hams
  213.     RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
  214.     RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
  215. }
  216.  
  217. public client_disconnected(id)
  218. {
  219.     WPN_AUTO_ON = 0
  220.     WPN_STARTID = 0
  221. }
  222.  
  223. public Cmd_Enable(id)
  224. {
  225.     if (WPN_AUTO_ON)
  226.     {
  227.         ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
  228.         WPN_AUTO_ON = 0
  229.     }
  230. }
  231.  
  232. public Cmd_Buy(id)
  233. {
  234.     // Player Zombie
  235.     if (ze_is_user_zombie(id))
  236.     {
  237.         ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
  238.         return
  239.     }
  240.    
  241.     // Player Dead
  242.     if (!is_user_alive(id))
  243.     {
  244.         ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
  245.         return
  246.     }
  247.    
  248.     // Already bought
  249.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  250.     {
  251.         ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
  252.     }
  253.    
  254.     Show_Available_Buy_Menus(id)
  255. }
  256.  
  257. public ze_user_humanized(id)
  258. {
  259.     // Static Values
  260.     switch (ze_get_user_level(id))
  261.     {
  262.         case 0: WPN_MAXIDS[id] = 2
  263.         case 1: WPN_MAXIDS[id] = 3
  264.         case 2: WPN_MAXIDS[id] = 4
  265.         case 3: WPN_MAXIDS[id] = 5
  266.         case 4: WPN_MAXIDS[id] = 6
  267.         case 5: WPN_MAXIDS[id] = 7
  268.         case 6: WPN_MAXIDS[id] = 8
  269.         case 7: WPN_MAXIDS[id] = 9
  270.         case 8: WPN_MAXIDS[id] = 10
  271.         case 9: WPN_MAXIDS[id] = 11
  272.         case 10: WPN_MAXIDS[id] = 12
  273.         case 11: WPN_MAXIDS[id] = 13
  274.         case 12..14: WPN_MAXIDS[id] = 14
  275.         case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
  276.         case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
  277.         case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
  278.         case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
  279.         case 35: WPN_MAXIDS[id] = 19   // M32
  280.     }
  281.    
  282.     if (ze_get_user_level(id) > 35)
  283.     {
  284.         WPN_MAXIDS[id] = 19
  285.     }
  286.  
  287.     // Buyzone time starts when player is set to human
  288.     g_fBuyTimeStart[id] = get_gametime()
  289.    
  290.     g_bBoughtPrimary[id] = false
  291.     g_bBoughtSecondary[id] = false
  292.    
  293.     // Player dead or zombie
  294.     if (!is_user_alive(id) || ze_is_user_zombie(id))
  295.         return
  296.    
  297.     if (WPN_AUTO_ON)
  298.     {
  299.         ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
  300.         Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  301.         Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
  302.     }
  303.    
  304.     // Open available buy menus
  305.     Show_Available_Buy_Menus(id)
  306.    
  307.     // Give HE Grenade
  308.     if (get_pcvar_num(g_pCvarHeGrenade) != 0)
  309.         rg_give_item(id, "weapon_hegrenade")
  310.    
  311.     // Give Smoke Grenade
  312.     if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
  313.         rg_give_item(id, "weapon_smokegrenade")
  314.    
  315.     // Give Flashbang Grenade
  316.     if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
  317.         rg_give_item(id, "weapon_flashbang")
  318. }
  319.  
  320. public Show_Available_Buy_Menus(id)
  321. {
  322.     // Already Bought
  323.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  324.         return
  325.    
  326.     // Here we use if and else if so we make sure that Primary weapon come first then secondary
  327.     if (!g_bBoughtPrimary[id])
  328.     {
  329.         // Primary    
  330.         Show_Menu_Buy_Primary(id)
  331.     }
  332.     else if (!g_bBoughtSecondary[id])
  333.     {
  334.         // Secondary
  335.         Show_Menu_Buy_Secondary(id)
  336.     }
  337. }
  338.  
  339. public Show_Menu_Buy_Primary(id)
  340. {
  341.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  342.    
  343.     if (iMenuTime <= 0)
  344.     {
  345.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  346.         return
  347.     }
  348.    
  349.     static szMenu[300], szWeaponName[32]
  350.     new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
  351.    
  352.     // Title
  353.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
  354.    
  355.     // 1-7. Weapon List
  356.     for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
  357.     {
  358.         if (ze_get_user_level(id) == 0 && iIndex >= 2||
  359.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  360.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  361.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  362.         ze_get_user_level(id) == 4 && iIndex >= 6 ||
  363.         ze_get_user_level(id) == 5 && iIndex >= 7 ||
  364.         ze_get_user_level(id) == 6 && iIndex >= 8 ||
  365.         ze_get_user_level(id) == 7 && iIndex >= 9 ||
  366.         ze_get_user_level(id) == 8 && iIndex >= 10 ||
  367.         ze_get_user_level(id) == 9 && iIndex >= 11 ||
  368.         ze_get_user_level(id) == 10 && iIndex >= 12 ||
  369.         ze_get_user_level(id) == 11 && iIndex >= 13 ||
  370.         ze_get_user_level(id) == 12 && iIndex >= 14)
  371.         {
  372.             break
  373.         }
  374.        
  375.         /*
  376.         *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
  377.         */
  378.        
  379.         // Golden M3
  380.         if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
  381.         {
  382.             if (iIndex == 14)
  383.             {
  384.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  385.                 break;
  386.             }
  387.         }
  388.        
  389.         // Golden MP5
  390.         if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
  391.         {
  392.             if (iIndex == 14)
  393.             {
  394.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  395.             }
  396.            
  397.             if (iIndex == 15)
  398.             {
  399.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  400.                 break;
  401.             }
  402.         }
  403.        
  404.         // Golden M4A1
  405.         if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
  406.         {
  407.             if (iIndex == 14)
  408.             {
  409.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  410.             }
  411.            
  412.             if (iIndex == 15)
  413.             {
  414.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  415.             }
  416.            
  417.             if (iIndex == 16)
  418.             {
  419.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  420.                 break;
  421.             }
  422.         }
  423.        
  424.         // Golden AK47
  425.         if (ze_get_user_level(id) >= 30)
  426.         {
  427.             if (iIndex == 14)
  428.             {
  429.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  430.             }
  431.            
  432.             if (iIndex == 15)
  433.             {
  434.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  435.             }
  436.            
  437.             if (iIndex == 16)
  438.             {
  439.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  440.             }
  441.            
  442.             if (iIndex == 17)
  443.             {
  444.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
  445.             }
  446.         }
  447.  
  448.         if (iIndex == 18)
  449.         {
  450.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
  451.             break;
  452.         }
  453.        
  454.         // Must check if iIndex < 14 means max is AK47
  455.         if (iIndex < 14)
  456.         {
  457.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  458.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
  459.         }
  460.  
  461.         if (iIndex < 7)
  462.         {
  463.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  464.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  465.         }
  466.     }
  467.    
  468.     if (ze_get_user_level(id) == 5)
  469.     {
  470.         ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
  471.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  472.     }
  473.     else if (ze_get_user_level(id) == 6)
  474.     {
  475.         ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
  476.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  477.     }
  478.     else if (ze_get_user_level(id) == 7)
  479.     {
  480.         ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
  481.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  482.     }
  483.     else if (ze_get_user_level(id) == 8)
  484.     {
  485.         ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
  486.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  487.     }
  488.     else if (ze_get_user_level(id) == 9)
  489.     {
  490.         ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
  491.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  492.     }
  493.     else if (ze_get_user_level(id) == 10)
  494.     {
  495.         ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
  496.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  497.     }
  498.     else if (ze_get_user_level(id) == 11)
  499.     {
  500.         ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
  501.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  502.     }
  503.     else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
  504.     {
  505.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
  506.     }
  507.     else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
  508.     {
  509.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
  510.     }
  511.     else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
  512.     {
  513.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
  514.     }
  515.     else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
  516.     {
  517.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
  518.     }
  519.     else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
  520.     {
  521.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
  522.     }
  523.    
  524.    
  525.  
  526.     // 8. Auto Select
  527.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  528.    
  529.     // 9. Next/Back - 0. Exit
  530.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
  531.    
  532.     // Fix for AMXX custom menus
  533.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  534.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
  535. }
  536.  
  537. public Show_Menu_Buy_Secondary(id)
  538. {
  539.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  540.    
  541.     if (iMenuTime <= 0)
  542.     {
  543.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  544.         return
  545.     }
  546.    
  547.     static szMenu[250], szWeaponName[32]
  548.     new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
  549.    
  550.     // Title
  551.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
  552.    
  553.     // 1-6. Weapon List
  554.     for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
  555.     {
  556.         if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
  557.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  558.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  559.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  560.         ze_get_user_level(id) == 4 && iIndex >= 6)
  561.         {
  562.             break
  563.         }
  564.        
  565.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  566.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
  567.     }
  568.    
  569.     if (iIndex < ArraySize(g_szSecondaryWeapons))
  570.     {
  571.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  572.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  573.     }
  574.    
  575.     // 8. Auto Select
  576.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  577.    
  578.     // 0. Exit
  579.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
  580.    
  581.     // Fix for AMXX custom menus
  582.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  583.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
  584. }
  585.  
  586. public Menu_Buy_Primary(id, key)
  587. {
  588.     // Player dead or zombie or already bought primary
  589.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
  590.         return PLUGIN_HANDLED
  591.    
  592.     // Special keys / weapon list exceeded
  593.     if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
  594.     {
  595.         switch (key)
  596.         {
  597.             case MENU_KEY_AUTOSELECT: // toggle auto select
  598.             {
  599.                 WPN_AUTO_ON = 1 - WPN_AUTO_ON
  600.             }
  601.             case MENU_KEY_NEXT: // next/back
  602.             {
  603.                 if (WPN_STARTID+7 < WPN_MAXIDS[id])
  604.                     WPN_STARTID += 7
  605.                 else
  606.                     WPN_STARTID = 0
  607.             }
  608.             case MENU_KEY_EXIT: // exit
  609.             {
  610.                 return PLUGIN_HANDLED
  611.             }
  612.         }
  613.        
  614.         // Show buy menu again
  615.         Show_Menu_Buy_Primary(id)
  616.         return PLUGIN_HANDLED
  617.     }
  618.    
  619.     // Store selected weapon id
  620.     WPN_AUTO_PRI = WPN_SELECTION
  621.    
  622.     // Buy primary weapon
  623.     Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  624.    
  625.     // Show Secondary Weapons
  626.     Show_Available_Buy_Menus(id)
  627.    
  628.     return PLUGIN_HANDLED
  629. }
  630.  
  631. public Buy_Primary_Weapon(id, selection)
  632. {
  633.     if (selection == 14) // Frost M4A1
  634.     {
  635.         give_frost_m4a1(id)
  636.         g_bBoughtPrimary[id] = true
  637.         return true;
  638.     }
  639.     else if (selection == 15) // Golden MP5
  640.     {
  641.         give_golden_mp5(id)
  642.         g_bBoughtPrimary[id] = true
  643.         return true;
  644.     }
  645.     else if (selection == 16) // Golden M4A1
  646.     {
  647.         give_golden_m4a1(id)
  648.         g_bBoughtPrimary[id] = true
  649.         return true;
  650.     }
  651.     else if (selection == 17) // Thantos-5
  652.     {
  653.         give_thantos5(id)
  654.         g_bBoughtPrimary[id] = true
  655.         return true;
  656.     }
  657.     else if (selection == 18) // M32
  658.     {
  659.         give_weapon_m32(id)
  660.         g_bBoughtPrimary[id] = true
  661.         return true;
  662.     }  
  663.    
  664.     static szWeaponName[32]
  665.     ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  666.     new iWeaponId = get_weaponid(szWeaponName)
  667.    
  668.     // Strip and Give Full Weapon
  669.     rg_give_item(id, szWeaponName, GT_REPLACE)
  670.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  671.    
  672.     // Primary bought
  673.     g_bBoughtPrimary[id] = true
  674.     return true;
  675. }
  676.  
  677. public Menu_Buy_Secondary(id, key)
  678. {
  679.     // Player dead or zombie or already bought secondary
  680.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
  681.         return PLUGIN_HANDLED
  682.    
  683.     // Special keys / weapon list exceeded
  684.     if (key >= ArraySize(g_szSecondaryWeapons))
  685.     {
  686.         // Toggle autoselect
  687.         if (key == MENU_KEY_AUTOSELECT)
  688.             WPN_AUTO_ON = 1 - WPN_AUTO_ON
  689.        
  690.         // Reshow menu unless user exited
  691.         if (key != MENU_KEY_EXIT)
  692.             Show_Menu_Buy_Secondary(id)
  693.        
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     // Store selected weapon id
  698.     WPN_AUTO_SEC = key
  699.    
  700.     // Buy secondary weapon
  701.     Buy_Secondary_Weapon(id, key)
  702.    
  703.     return PLUGIN_HANDLED
  704. }
  705.  
  706. public Buy_Secondary_Weapon(id, selection)
  707. {
  708.     if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
  709.     ((selection == 3) && (ze_get_user_level(id) < 2)) ||
  710.     ((selection == 4) && (ze_get_user_level(id) < 3)) ||
  711.     ((selection == 5) && (ze_get_user_level(id) < 4)) )
  712.     {
  713.         Show_Menu_Buy_Secondary(id)
  714.         return;
  715.     }
  716.  
  717.     static szWeaponName[32]
  718.     ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  719.     new iWeaponId = get_weaponid(szWeaponName)
  720.    
  721.     // Strip and Give Full Weapon
  722.     rg_give_item(id, szWeaponName, GT_REPLACE)
  723.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  724.     ze_giveminigun(id)
  725.  
  726.    
  727.     // Secondary bought
  728.     g_bBoughtSecondary[id] = true
  729. }
  730.  
  731. public Fw_TouchWeapon_Pre(iEnt, id)
  732. {
  733.     if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
  734.         return HAM_IGNORED;
  735.    
  736.     // Not alive or Not Valid Weapon?
  737.     if(!is_user_alive(id) || !pev_valid(iEnt))
  738.         return HAM_IGNORED;
  739.    
  740.     // Get Weapon Model
  741.     new szWeapModel[32]
  742.     pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
  743.    
  744.     // Remove "models/w_" and ".mdl"
  745.     copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
  746.    
  747.     // Set for mp5 to be same as "weapon_mp5navy"
  748.     if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
  749.         szWeapModel = "mp5navy"
  750.    
  751.     // Add "weapon_" to all model names
  752.     static szWeaponEnt[32]
  753.     formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
  754.  
  755.     // Get it's index in Weapon Array
  756.     new iIndex, i
  757.    
  758.     // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
  759.     for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
  760.     {
  761.         new szPrimaryWeapon[32]
  762.         ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
  763.        
  764.         if (equali(szWeaponEnt, szPrimaryWeapon))
  765.             iIndex = i
  766.     }
  767.    
  768.     if (ze_get_user_level(id) == 0 && iIndex > 1)
  769.     {
  770.         return HAM_SUPERCEDE;
  771.     }
  772.    
  773.     for (i = 1; i <= 11; i++)
  774.     {
  775.         if ((ze_get_user_level(id) == i) && iIndex > i+1)
  776.         {
  777.             return HAM_SUPERCEDE;
  778.         }
  779.     }
  780.    
  781.     return HAM_IGNORED;
  782. }
  783.  
  784. // Natives
  785. public native_ze_show_weapon_menu(id)
  786. {
  787.     if (!is_user_connected(id))
  788.     {
  789.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  790.         return false
  791.     }
  792.    
  793.     Cmd_Buy(id)
  794.     return true
  795. }
  796.  
  797. public native_ze_is_auto_buy_enabled(id)
  798. {
  799.     if (!is_user_connected(id))
  800.     {
  801.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  802.         return -1;
  803.     }
  804.    
  805.     return WPN_AUTO_ON;
  806. }
  807.  
  808. public native_ze_disable_auto_buy(id)
  809. {
  810.     if (!is_user_connected(id))
  811.     {
  812.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  813.         return false
  814.     }
  815.    
  816.     WPN_AUTO_ON = 0;
  817.     return true
  818. }

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#8

Post by Luxurious » 5 years ago

Mark wrote: 5 years ago
Luxurious wrote: 5 years ago up..!
Jack GamePlay wrote: 5 years ago

Code: Select all

#include <zombie_escape>
#include <ze_levels>
 
native give_golden_m3(id);
native give_golden_mp5(id);
native give_golden_m4a1(id);
native give_golden_ak47(id);
native ze_giveminigun(id);
native give_thantos5(id);
native give_frost_m4a1(id);
native give_weapon_m32(id);

 
// Setting File
new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
 
// Keys
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const OFFSET_CSMENUCODE = 205
 
// Primary Weapons Entities [Default Values]
new const szPrimaryWeaponEnt[][] =
{
	"weapon_xm1014",  // Level 0
	"weapon_ump45",   // Level 0
	"weapon_m3",      // Level 1
	"weapon_mp5navy", // Level 2
	"weapon_p90",     // Level 3
	"weapon_galil",   // Level 4
	"weapon_famas",   // Level 5
	"weapon_sg550",   // Level 6
	"weapon_g3sg1",   // Level 7
	"weapon_m249",    // Level 8
	"weapon_sg552",   // Level 9
	"weapon_aug",     // Level 10
	"weapon_m4a1",    // Level 11
	"weapon_ak47"     // Level 12
}
 
// Secondary Weapons Entities [Default Values]
new const szSecondaryWeaponEnt[][]=
{
	"weapon_usp",         // Level 0
	"weapon_p228",        // Level 0
	"weapon_glock18",     // Level 1
	"weapon_fiveseven",   // Level 2
	"weapon_deagle",      // Level 3
	"weapon_elite"        // Level 4
}
 
// Primary and Secondary Weapons Names [Default Values]
new const szWeaponNames[][] =
{
	"",
	"P228",
	"",
	"Scout",
	"HE Grenade",
	"XM1014",
	"",
	"MAC-10",
	"AUG",
	"Smoke Grenade",
	"Dual Elite",
	"Five Seven",
	"UMP 45",
	"SG-550",
	"Galil",
	"Famas",
	"USP",
	"Glock",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"Flashbang",
	"Desert Eagle",
	"SG-552",
	"AK-47",
	"",
	"P90"
}
 
// Max Back Clip Ammo (Change it From here if you need)
new const szMaxBPAmmo[] =
{
	-1,
	200,
	-1,
	200,
	1,
	200,
	1,
	200,
	200,
	1,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	200,
	32,
	200,
	200,
	200,
	2,
	200,
	200,
	200,
	-1,
	200
}
 
// Menu selections
const MENU_KEY_AUTOSELECT = 7
const MENU_KEY_BACK = 7
const MENU_KEY_NEXT = 8
const MENU_KEY_EXIT = 9
 
// Variables
new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
 
new g_iMenuData[33][4],
	Float:g_fBuyTimeStart[33],
	bool:g_bBoughtPrimary[33],
	bool:g_bBoughtSecondary[33],
	WPN_MAXIDS[33]
 
// Define
#define WPN_STARTID g_iMenuData[id][0]
#define WPN_SELECTION (g_iMenuData[id][0]+key)
#define WPN_AUTO_ON g_iMenuData[id][1]
#define WPN_AUTO_PRI g_iMenuData[id][2]
#define WPN_AUTO_SEC g_iMenuData[id][3]
 
// Cvars
new g_pCvarBuyTime,
	g_pCvarHeGrenade,
	g_pCvarSmokeGrenade,
	g_pCvarFlashGrenade,
	g_pCvarBlockWeapLowLevel
 
public plugin_natives()
{
	register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
	register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
	register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
}
 
public plugin_precache()
{
	// Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
	g_szPrimaryWeapons = ArrayCreate(32, 1)
	g_szSecondaryWeapons = ArrayCreate(32, 1)
   
	// Load from external file
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
   
	// If we couldn't load from file, use and save default ones
   
	new iIndex
   
	if (ArraySize(g_szPrimaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
			ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
	}
   
	if (ArraySize(g_szSecondaryWeapons) == 0)
	{
		for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
			ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
	   
		// If not found .ini File Create it and save default values in it
		amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
	}
}
 
public plugin_init()
{
	register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
   
	// Commands
	register_clcmd("guns", "Cmd_Buy")
	register_clcmd("say /enable", "Cmd_Enable")
	register_clcmd("say_team /enable", "Cmd_Enable")
   
	// Cvars
	g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
	g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
	g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
	g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
	g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
   
	// Menus
	register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
	register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
   
	// Hams
	RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
	RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
}
 
public client_disconnected(id)
{
	WPN_AUTO_ON = 0
	WPN_STARTID = 0
}
 
public Cmd_Enable(id)
{
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
		WPN_AUTO_ON = 0
	}
}
 
public Cmd_Buy(id)
{
	// Player Zombie
	if (ze_is_user_zombie(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
		return
	}
   
	// Player Dead
	if (!is_user_alive(id))
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
		return
	}
   
	// Already bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
	}
   
	Show_Available_Buy_Menus(id)
}
 
public ze_user_humanized(id)
{
	// Static Values
	switch (ze_get_user_level(id))
	{
		case 0: WPN_MAXIDS[id] = 2
		case 1: WPN_MAXIDS[id] = 3
		case 2: WPN_MAXIDS[id] = 4
		case 3: WPN_MAXIDS[id] = 5
		case 4: WPN_MAXIDS[id] = 6
		case 5: WPN_MAXIDS[id] = 7
		case 6: WPN_MAXIDS[id] = 8
		case 7: WPN_MAXIDS[id] = 9
		case 8: WPN_MAXIDS[id] = 10
		case 9: WPN_MAXIDS[id] = 11
		case 10: WPN_MAXIDS[id] = 12
		case 11: WPN_MAXIDS[id] = 13
		case 12..14: WPN_MAXIDS[id] = 14
		case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
		case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
		case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
		case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
		case 35: WPN_MAXIDS[id] = 19   // M32
	}
   
	if (ze_get_user_level(id) > 35)
	{
		WPN_MAXIDS[id] = 19
	}
 
	// Buyzone time starts when player is set to human
	g_fBuyTimeStart[id] = get_gametime()
   
	g_bBoughtPrimary[id] = false
	g_bBoughtSecondary[id] = false
   
	// Player dead or zombie
	if (!is_user_alive(id) || ze_is_user_zombie(id))
		return
   
	if (WPN_AUTO_ON)
	{
		ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
		Buy_Primary_Weapon(id, WPN_AUTO_PRI)
		Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
	}
   
	// Open available buy menus
	Show_Available_Buy_Menus(id)
   
	// Give HE Grenade
	if (get_pcvar_num(g_pCvarHeGrenade) != 0)
		rg_give_item(id, "weapon_hegrenade")
   
	// Give Smoke Grenade
	if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
		rg_give_item(id, "weapon_smokegrenade")
   
	// Give Flashbang Grenade
	if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
		rg_give_item(id, "weapon_flashbang")
}
 
public Show_Available_Buy_Menus(id)
{
	// Already Bought
	if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
		return
   
	// Here we use if and else if so we make sure that Primary weapon come first then secondary
	if (!g_bBoughtPrimary[id])
	{
		// Primary     
		Show_Menu_Buy_Primary(id)
	}
	else if (!g_bBoughtSecondary[id])
	{
		// Secondary
		Show_Menu_Buy_Secondary(id)
	}
}
 
public Show_Menu_Buy_Primary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[300], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
	
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
	
	// 1-7. Weapon List
	for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6 ||
		ze_get_user_level(id) == 5 && iIndex >= 7 ||
		ze_get_user_level(id) == 6 && iIndex >= 8 ||
		ze_get_user_level(id) == 7 && iIndex >= 9 ||
		ze_get_user_level(id) == 8 && iIndex >= 10 ||
		ze_get_user_level(id) == 9 && iIndex >= 11 ||
		ze_get_user_level(id) == 10 && iIndex >= 12 ||
		ze_get_user_level(id) == 11 && iIndex >= 13 ||
		ze_get_user_level(id) == 12 && iIndex >= 14)
		{
			break
		}
	   
		/*
		*  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
		*/
	   
		// Golden M3
		if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
				break;
			}
		}
	   
		// Golden MP5
		if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
				break;
			}
		}
	   
		// Golden M4A1
		if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
				break;
			}
		}
	   
		// Golden AK47
		if (ze_get_user_level(id) >= 30)
		{
			if (iIndex == 14)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
			}
		   
			if (iIndex == 15)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
			}
		   
			if (iIndex == 16)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
			}
		   
			if (iIndex == 17)
			{
				iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
			}
		}

		if (iIndex == 18)
		{
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
			break;
		}
	   
		// Must check if iIndex < 14 means max is AK47
		if (iIndex < 14)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
		}

		if (iIndex < 7)
		{
			ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
			iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
		}
	}
   
	if (ze_get_user_level(id) == 5)
	{
		ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 6)
	{
		ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 7)
	{
		ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 8)
	{
		ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 9)
	{
		ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 10)
	{
		ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) == 11)
	{
		ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
	}
	else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
	}
	else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
	}
	else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
	}
	else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
	}
	else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
	{
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
	}
	
	
 
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 9. Next/Back - 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
}
 
public Show_Menu_Buy_Secondary(id)
{
	new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
   
	if (iMenuTime <= 0)
	{
		ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
		return
	}
   
	static szMenu[250], szWeaponName[32]
	new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
   
	// Title
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
   
	// 1-6. Weapon List
	for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
	{
		if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
		ze_get_user_level(id) == 1 && iIndex >= 3 ||
		ze_get_user_level(id) == 2 && iIndex >= 4 ||
		ze_get_user_level(id) == 3 && iIndex >= 5 ||
		ze_get_user_level(id) == 4 && iIndex >= 6)
		{
			break
		}
	   
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	if (iIndex < ArraySize(g_szSecondaryWeapons))
	{
		ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
	}
   
	// 8. Auto Select
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
   
	// 0. Exit
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
   
	// Fix for AMXX custom menus
	set_pdata_int(id, OFFSET_CSMENUCODE, 0)
	show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
}
 
public Menu_Buy_Primary(id, key)
{
	// Player dead or zombie or already bought primary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
	{
		switch (key)
		{
			case MENU_KEY_AUTOSELECT: // toggle auto select
			{
				WPN_AUTO_ON = 1 - WPN_AUTO_ON
			}
			case MENU_KEY_NEXT: // next/back
			{
				if (WPN_STARTID+7 < WPN_MAXIDS[id])
					WPN_STARTID += 7
				else
					WPN_STARTID = 0
			}
			case MENU_KEY_EXIT: // exit
			{
				return PLUGIN_HANDLED
			}
		}
	   
		// Show buy menu again
		Show_Menu_Buy_Primary(id)
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_PRI = WPN_SELECTION
   
	// Buy primary weapon
	Buy_Primary_Weapon(id, WPN_AUTO_PRI)
   
	// Show Secondary Weapons
	Show_Available_Buy_Menus(id)
   
	return PLUGIN_HANDLED
}
 
public Buy_Primary_Weapon(id, selection)
{
	if (selection == 14) // Frost M4A1
	{
		give_frost_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 15) // Golden MP5
	{
		give_golden_mp5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 16) // Golden M4A1
	{
		give_golden_m4a1(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 17) // Thantos-5
	{
		give_thantos5(id)
		g_bBoughtPrimary[id] = true
		return true;
	}
	else if (selection == 18) // M32
	{
		give_weapon_m32(id)
		g_bBoughtPrimary[id] = true
		return true;
	}   
   
	static szWeaponName[32]
	ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
   
	// Primary bought
	g_bBoughtPrimary[id] = true
	return true;
}
 
public Menu_Buy_Secondary(id, key)
{
	// Player dead or zombie or already bought secondary
	if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
		return PLUGIN_HANDLED
   
	// Special keys / weapon list exceeded
	if (key >= ArraySize(g_szSecondaryWeapons))
	{
		// Toggle autoselect
		if (key == MENU_KEY_AUTOSELECT)
			WPN_AUTO_ON = 1 - WPN_AUTO_ON
	   
		// Reshow menu unless user exited
		if (key != MENU_KEY_EXIT)
			Show_Menu_Buy_Secondary(id)
	   
		return PLUGIN_HANDLED
	}
   
	// Store selected weapon id
	WPN_AUTO_SEC = key
   
	// Buy secondary weapon
	Buy_Secondary_Weapon(id, key)
   
	return PLUGIN_HANDLED
}
 
public Buy_Secondary_Weapon(id, selection)
{
	if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
	((selection == 3) && (ze_get_user_level(id) < 2)) ||
	((selection == 4) && (ze_get_user_level(id) < 3)) ||
	((selection == 5) && (ze_get_user_level(id) < 4)) )
	{
		Show_Menu_Buy_Secondary(id)
		return;
	}
 
	static szWeaponName[32]
	ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
	new iWeaponId = get_weaponid(szWeaponName)
   
	// Strip and Give Full Weapon
	rg_give_item(id, szWeaponName, GT_REPLACE)
	rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
	ze_giveminigun(id)
 
   
	// Secondary bought
	g_bBoughtSecondary[id] = true
}
 
public Fw_TouchWeapon_Pre(iEnt, id)
{
	if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
		return HAM_IGNORED;
   
	// Not alive or Not Valid Weapon?
	if(!is_user_alive(id) || !pev_valid(iEnt))
		return HAM_IGNORED;
   
	// Get Weapon Model
	new szWeapModel[32]
	pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
   
	// Remove "models/w_" and ".mdl"
	copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
   
	// Set for mp5 to be same as "weapon_mp5navy"
	if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
		szWeapModel = "mp5navy"
   
	// Add "weapon_" to all model names
	static szWeaponEnt[32]
	formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
 
	// Get it's index in Weapon Array
	new iIndex, i
   
	// I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
	for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
	{
		new szPrimaryWeapon[32]
		ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
	   
		if (equali(szWeaponEnt, szPrimaryWeapon))
			iIndex = i
	}
   
	if (ze_get_user_level(id) == 0 && iIndex > 1)
	{
		return HAM_SUPERCEDE;
	}
   
	for (i = 1; i <= 11; i++)
	{
		if ((ze_get_user_level(id) == i) && iIndex > i+1)
		{
			return HAM_SUPERCEDE;
		}
	}
   
	return HAM_IGNORED;
}
 
// Natives
public native_ze_show_weapon_menu(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	Cmd_Buy(id)
	return true
}
 
public native_ze_is_auto_buy_enabled(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return -1;
	}
   
	return WPN_AUTO_ON;
}
 
public native_ze_disable_auto_buy(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
		return false
	}
   
	WPN_AUTO_ON = 0;
	return true
}
That is caused by line break to many of these ^n

try this! Post a pic of what it looks like now.....
  1. #include <zombie_escape>
  2. #include <ze_levels>
  3.  
  4. native give_golden_m3(id);
  5. native give_golden_mp5(id);
  6. native give_golden_m4a1(id);
  7. native give_golden_ak47(id);
  8. native ze_giveminigun(id);
  9. native give_thantos5(id);
  10. native give_frost_m4a1(id);
  11. native give_weapon_m32(id);
  12.  
  13.  
  14. // Setting File
  15. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  16.  
  17. // Keys
  18. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  19. const OFFSET_CSMENUCODE = 205
  20.  
  21. // Primary Weapons Entities [Default Values]
  22. new const szPrimaryWeaponEnt[][] =
  23. {
  24.     "weapon_xm1014",  // Level 0
  25.     "weapon_ump45",   // Level 0
  26.     "weapon_m3",      // Level 1
  27.     "weapon_mp5navy", // Level 2
  28.     "weapon_p90",     // Level 3
  29.     "weapon_galil",   // Level 4
  30.     "weapon_famas",   // Level 5
  31.     "weapon_sg550",   // Level 6
  32.     "weapon_g3sg1",   // Level 7
  33.     "weapon_m249",    // Level 8
  34.     "weapon_sg552",   // Level 9
  35.     "weapon_aug",     // Level 10
  36.     "weapon_m4a1",    // Level 11
  37.     "weapon_ak47"     // Level 12
  38. }
  39.  
  40. // Secondary Weapons Entities [Default Values]
  41. new const szSecondaryWeaponEnt[][]=
  42. {
  43.     "weapon_usp",         // Level 0
  44.     "weapon_p228",        // Level 0
  45.     "weapon_glock18",     // Level 1
  46.     "weapon_fiveseven",   // Level 2
  47.     "weapon_deagle",      // Level 3
  48.     "weapon_elite"        // Level 4
  49. }
  50.  
  51. // Primary and Secondary Weapons Names [Default Values]
  52. new const szWeaponNames[][] =
  53. {
  54.     "",
  55.     "P228",
  56.     "",
  57.     "Scout",
  58.     "HE Grenade",
  59.     "XM1014",
  60.     "",
  61.     "MAC-10",
  62.     "AUG",
  63.     "Smoke Grenade",
  64.     "Dual Elite",
  65.     "Five Seven",
  66.     "UMP 45",
  67.     "SG-550",
  68.     "Galil",
  69.     "Famas",
  70.     "USP",
  71.     "Glock",
  72.     "AWP",
  73.     "MP5",
  74.     "M249",
  75.     "M3",
  76.     "M4A1",
  77.     "TMP",
  78.     "G3SG1",
  79.     "Flashbang",
  80.     "Desert Eagle",
  81.     "SG-552",
  82.     "AK-47",
  83.     "",
  84.     "P90"
  85. }
  86.  
  87. // Max Back Clip Ammo (Change it From here if you need)
  88. new const szMaxBPAmmo[] =
  89. {
  90.     -1,
  91.     200,
  92.     -1,
  93.     200,
  94.     1,
  95.     200,
  96.     1,
  97.     200,
  98.     200,
  99.     1,
  100.     200,
  101.     200,
  102.     200,
  103.     200,
  104.     200,
  105.     200,
  106.     200,
  107.     200,
  108.     200,
  109.     200,
  110.     200,
  111.     32,
  112.     200,
  113.     200,
  114.     200,
  115.     2,
  116.     200,
  117.     200,
  118.     200,
  119.     -1,
  120.     200
  121. }
  122.  
  123. // Menu selections
  124. const MENU_KEY_AUTOSELECT = 7
  125. const MENU_KEY_BACK = 7
  126. const MENU_KEY_NEXT = 8
  127. const MENU_KEY_EXIT = 9
  128.  
  129. // Variables
  130. new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
  131.  
  132. new g_iMenuData[33][4],
  133.     Float:g_fBuyTimeStart[33],
  134.     bool:g_bBoughtPrimary[33],
  135.     bool:g_bBoughtSecondary[33],
  136.     WPN_MAXIDS[33]
  137.  
  138. // Define
  139. #define WPN_STARTID g_iMenuData[id][0]
  140. #define WPN_SELECTION (g_iMenuData[id][0]+key)
  141. #define WPN_AUTO_ON g_iMenuData[id][1]
  142. #define WPN_AUTO_PRI g_iMenuData[id][2]
  143. #define WPN_AUTO_SEC g_iMenuData[id][3]
  144.  
  145. // Cvars
  146. new g_pCvarBuyTime,
  147.     g_pCvarHeGrenade,
  148.     g_pCvarSmokeGrenade,
  149.     g_pCvarFlashGrenade,
  150.     g_pCvarBlockWeapLowLevel
  151.  
  152. public plugin_natives()
  153. {
  154.     register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
  155.     register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
  156.     register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
  157. }
  158.  
  159. public plugin_precache()
  160. {
  161.     // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
  162.     g_szPrimaryWeapons = ArrayCreate(32, 1)
  163.     g_szSecondaryWeapons = ArrayCreate(32, 1)
  164.    
  165.     // Load from external file
  166.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  167.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  168.    
  169.     // If we couldn't load from file, use and save default ones
  170.    
  171.     new iIndex
  172.    
  173.     if (ArraySize(g_szPrimaryWeapons) == 0)
  174.     {
  175.         for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
  176.             ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
  177.        
  178.         // If not found .ini File Create it and save default values in it
  179.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  180.     }
  181.    
  182.     if (ArraySize(g_szSecondaryWeapons) == 0)
  183.     {
  184.         for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
  185.             ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
  186.        
  187.         // If not found .ini File Create it and save default values in it
  188.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  189.     }
  190. }
  191.  
  192. public plugin_init()
  193. {
  194.     register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
  195.    
  196.     // Commands
  197.     register_clcmd("guns", "Cmd_Buy")
  198.     register_clcmd("say /enable", "Cmd_Enable")
  199.     register_clcmd("say_team /enable", "Cmd_Enable")
  200.    
  201.     // Cvars
  202.     g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
  203.     g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
  204.     g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
  205.     g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
  206.     g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
  207.    
  208.     // Menus
  209.     register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
  210.     register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
  211.    
  212.     // Hams
  213.     RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
  214.     RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
  215. }
  216.  
  217. public client_disconnected(id)
  218. {
  219.     WPN_AUTO_ON = 0
  220.     WPN_STARTID = 0
  221. }
  222.  
  223. public Cmd_Enable(id)
  224. {
  225.     if (WPN_AUTO_ON)
  226.     {
  227.         ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
  228.         WPN_AUTO_ON = 0
  229.     }
  230. }
  231.  
  232. public Cmd_Buy(id)
  233. {
  234.     // Player Zombie
  235.     if (ze_is_user_zombie(id))
  236.     {
  237.         ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
  238.         return
  239.     }
  240.    
  241.     // Player Dead
  242.     if (!is_user_alive(id))
  243.     {
  244.         ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
  245.         return
  246.     }
  247.    
  248.     // Already bought
  249.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  250.     {
  251.         ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
  252.     }
  253.    
  254.     Show_Available_Buy_Menus(id)
  255. }
  256.  
  257. public ze_user_humanized(id)
  258. {
  259.     // Static Values
  260.     switch (ze_get_user_level(id))
  261.     {
  262.         case 0: WPN_MAXIDS[id] = 2
  263.         case 1: WPN_MAXIDS[id] = 3
  264.         case 2: WPN_MAXIDS[id] = 4
  265.         case 3: WPN_MAXIDS[id] = 5
  266.         case 4: WPN_MAXIDS[id] = 6
  267.         case 5: WPN_MAXIDS[id] = 7
  268.         case 6: WPN_MAXIDS[id] = 8
  269.         case 7: WPN_MAXIDS[id] = 9
  270.         case 8: WPN_MAXIDS[id] = 10
  271.         case 9: WPN_MAXIDS[id] = 11
  272.         case 10: WPN_MAXIDS[id] = 12
  273.         case 11: WPN_MAXIDS[id] = 13
  274.         case 12..14: WPN_MAXIDS[id] = 14
  275.         case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
  276.         case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
  277.         case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
  278.         case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
  279.         case 35: WPN_MAXIDS[id] = 19   // M32
  280.     }
  281.    
  282.     if (ze_get_user_level(id) > 35)
  283.     {
  284.         WPN_MAXIDS[id] = 19
  285.     }
  286.  
  287.     // Buyzone time starts when player is set to human
  288.     g_fBuyTimeStart[id] = get_gametime()
  289.    
  290.     g_bBoughtPrimary[id] = false
  291.     g_bBoughtSecondary[id] = false
  292.    
  293.     // Player dead or zombie
  294.     if (!is_user_alive(id) || ze_is_user_zombie(id))
  295.         return
  296.    
  297.     if (WPN_AUTO_ON)
  298.     {
  299.         ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
  300.         Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  301.         Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
  302.     }
  303.    
  304.     // Open available buy menus
  305.     Show_Available_Buy_Menus(id)
  306.    
  307.     // Give HE Grenade
  308.     if (get_pcvar_num(g_pCvarHeGrenade) != 0)
  309.         rg_give_item(id, "weapon_hegrenade")
  310.    
  311.     // Give Smoke Grenade
  312.     if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
  313.         rg_give_item(id, "weapon_smokegrenade")
  314.    
  315.     // Give Flashbang Grenade
  316.     if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
  317.         rg_give_item(id, "weapon_flashbang")
  318. }
  319.  
  320. public Show_Available_Buy_Menus(id)
  321. {
  322.     // Already Bought
  323.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  324.         return
  325.    
  326.     // Here we use if and else if so we make sure that Primary weapon come first then secondary
  327.     if (!g_bBoughtPrimary[id])
  328.     {
  329.         // Primary    
  330.         Show_Menu_Buy_Primary(id)
  331.     }
  332.     else if (!g_bBoughtSecondary[id])
  333.     {
  334.         // Secondary
  335.         Show_Menu_Buy_Secondary(id)
  336.     }
  337. }
  338.  
  339. public Show_Menu_Buy_Primary(id)
  340. {
  341.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  342.    
  343.     if (iMenuTime <= 0)
  344.     {
  345.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  346.         return
  347.     }
  348.    
  349.     static szMenu[300], szWeaponName[32]
  350.     new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
  351.    
  352.     // Title
  353.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
  354.    
  355.     // 1-7. Weapon List
  356.     for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
  357.     {
  358.         if (ze_get_user_level(id) == 0 && iIndex >= 2||
  359.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  360.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  361.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  362.         ze_get_user_level(id) == 4 && iIndex >= 6 ||
  363.         ze_get_user_level(id) == 5 && iIndex >= 7 ||
  364.         ze_get_user_level(id) == 6 && iIndex >= 8 ||
  365.         ze_get_user_level(id) == 7 && iIndex >= 9 ||
  366.         ze_get_user_level(id) == 8 && iIndex >= 10 ||
  367.         ze_get_user_level(id) == 9 && iIndex >= 11 ||
  368.         ze_get_user_level(id) == 10 && iIndex >= 12 ||
  369.         ze_get_user_level(id) == 11 && iIndex >= 13 ||
  370.         ze_get_user_level(id) == 12 && iIndex >= 14)
  371.         {
  372.             break
  373.         }
  374.        
  375.         /*
  376.         *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
  377.         */
  378.        
  379.         // Golden M3
  380.         if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
  381.         {
  382.             if (iIndex == 14)
  383.             {
  384.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  385.                 break;
  386.             }
  387.         }
  388.        
  389.         // Golden MP5
  390.         if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
  391.         {
  392.             if (iIndex == 14)
  393.             {
  394.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  395.             }
  396.            
  397.             if (iIndex == 15)
  398.             {
  399.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  400.                 break;
  401.             }
  402.         }
  403.        
  404.         // Golden M4A1
  405.         if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
  406.         {
  407.             if (iIndex == 14)
  408.             {
  409.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  410.             }
  411.            
  412.             if (iIndex == 15)
  413.             {
  414.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  415.             }
  416.            
  417.             if (iIndex == 16)
  418.             {
  419.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  420.                 break;
  421.             }
  422.         }
  423.        
  424.         // Golden AK47
  425.         if (ze_get_user_level(id) >= 30)
  426.         {
  427.             if (iIndex == 14)
  428.             {
  429.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  430.             }
  431.            
  432.             if (iIndex == 15)
  433.             {
  434.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  435.             }
  436.            
  437.             if (iIndex == 16)
  438.             {
  439.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  440.             }
  441.            
  442.             if (iIndex == 17)
  443.             {
  444.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
  445.             }
  446.         }
  447.  
  448.         if (iIndex == 18)
  449.         {
  450.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
  451.             break;
  452.         }
  453.        
  454.         // Must check if iIndex < 14 means max is AK47
  455.         if (iIndex < 14)
  456.         {
  457.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  458.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
  459.         }
  460.  
  461.         if (iIndex < 7)
  462.         {
  463.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  464.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  465.         }
  466.     }
  467.    
  468.     if (ze_get_user_level(id) == 5)
  469.     {
  470.         ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
  471.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  472.     }
  473.     else if (ze_get_user_level(id) == 6)
  474.     {
  475.         ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
  476.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  477.     }
  478.     else if (ze_get_user_level(id) == 7)
  479.     {
  480.         ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
  481.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  482.     }
  483.     else if (ze_get_user_level(id) == 8)
  484.     {
  485.         ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
  486.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  487.     }
  488.     else if (ze_get_user_level(id) == 9)
  489.     {
  490.         ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
  491.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  492.     }
  493.     else if (ze_get_user_level(id) == 10)
  494.     {
  495.         ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
  496.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  497.     }
  498.     else if (ze_get_user_level(id) == 11)
  499.     {
  500.         ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
  501.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  502.     }
  503.     else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
  504.     {
  505.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
  506.     }
  507.     else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
  508.     {
  509.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
  510.     }
  511.     else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
  512.     {
  513.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
  514.     }
  515.     else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
  516.     {
  517.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
  518.     }
  519.     else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
  520.     {
  521.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
  522.     }
  523.    
  524.    
  525.  
  526.     // 8. Auto Select
  527.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  528.    
  529.     // 9. Next/Back - 0. Exit
  530.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
  531.    
  532.     // Fix for AMXX custom menus
  533.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  534.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
  535. }
  536.  
  537. public Show_Menu_Buy_Secondary(id)
  538. {
  539.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  540.    
  541.     if (iMenuTime <= 0)
  542.     {
  543.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  544.         return
  545.     }
  546.    
  547.     static szMenu[250], szWeaponName[32]
  548.     new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
  549.    
  550.     // Title
  551.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
  552.    
  553.     // 1-6. Weapon List
  554.     for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
  555.     {
  556.         if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
  557.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  558.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  559.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  560.         ze_get_user_level(id) == 4 && iIndex >= 6)
  561.         {
  562.             break
  563.         }
  564.        
  565.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  566.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
  567.     }
  568.    
  569.     if (iIndex < ArraySize(g_szSecondaryWeapons))
  570.     {
  571.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  572.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  573.     }
  574.    
  575.     // 8. Auto Select
  576.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  577.    
  578.     // 0. Exit
  579.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
  580.    
  581.     // Fix for AMXX custom menus
  582.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  583.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
  584. }
  585.  
  586. public Menu_Buy_Primary(id, key)
  587. {
  588.     // Player dead or zombie or already bought primary
  589.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
  590.         return PLUGIN_HANDLED
  591.    
  592.     // Special keys / weapon list exceeded
  593.     if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
  594.     {
  595.         switch (key)
  596.         {
  597.             case MENU_KEY_AUTOSELECT: // toggle auto select
  598.             {
  599.                 WPN_AUTO_ON = 1 - WPN_AUTO_ON
  600.             }
  601.             case MENU_KEY_NEXT: // next/back
  602.             {
  603.                 if (WPN_STARTID+7 < WPN_MAXIDS[id])
  604.                     WPN_STARTID += 7
  605.                 else
  606.                     WPN_STARTID = 0
  607.             }
  608.             case MENU_KEY_EXIT: // exit
  609.             {
  610.                 return PLUGIN_HANDLED
  611.             }
  612.         }
  613.        
  614.         // Show buy menu again
  615.         Show_Menu_Buy_Primary(id)
  616.         return PLUGIN_HANDLED
  617.     }
  618.    
  619.     // Store selected weapon id
  620.     WPN_AUTO_PRI = WPN_SELECTION
  621.    
  622.     // Buy primary weapon
  623.     Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  624.    
  625.     // Show Secondary Weapons
  626.     Show_Available_Buy_Menus(id)
  627.    
  628.     return PLUGIN_HANDLED
  629. }
  630.  
  631. public Buy_Primary_Weapon(id, selection)
  632. {
  633.     if (selection == 14) // Frost M4A1
  634.     {
  635.         give_frost_m4a1(id)
  636.         g_bBoughtPrimary[id] = true
  637.         return true;
  638.     }
  639.     else if (selection == 15) // Golden MP5
  640.     {
  641.         give_golden_mp5(id)
  642.         g_bBoughtPrimary[id] = true
  643.         return true;
  644.     }
  645.     else if (selection == 16) // Golden M4A1
  646.     {
  647.         give_golden_m4a1(id)
  648.         g_bBoughtPrimary[id] = true
  649.         return true;
  650.     }
  651.     else if (selection == 17) // Thantos-5
  652.     {
  653.         give_thantos5(id)
  654.         g_bBoughtPrimary[id] = true
  655.         return true;
  656.     }
  657.     else if (selection == 18) // M32
  658.     {
  659.         give_weapon_m32(id)
  660.         g_bBoughtPrimary[id] = true
  661.         return true;
  662.     }  
  663.    
  664.     static szWeaponName[32]
  665.     ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  666.     new iWeaponId = get_weaponid(szWeaponName)
  667.    
  668.     // Strip and Give Full Weapon
  669.     rg_give_item(id, szWeaponName, GT_REPLACE)
  670.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  671.    
  672.     // Primary bought
  673.     g_bBoughtPrimary[id] = true
  674.     return true;
  675. }
  676.  
  677. public Menu_Buy_Secondary(id, key)
  678. {
  679.     // Player dead or zombie or already bought secondary
  680.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
  681.         return PLUGIN_HANDLED
  682.    
  683.     // Special keys / weapon list exceeded
  684.     if (key >= ArraySize(g_szSecondaryWeapons))
  685.     {
  686.         // Toggle autoselect
  687.         if (key == MENU_KEY_AUTOSELECT)
  688.             WPN_AUTO_ON = 1 - WPN_AUTO_ON
  689.        
  690.         // Reshow menu unless user exited
  691.         if (key != MENU_KEY_EXIT)
  692.             Show_Menu_Buy_Secondary(id)
  693.        
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     // Store selected weapon id
  698.     WPN_AUTO_SEC = key
  699.    
  700.     // Buy secondary weapon
  701.     Buy_Secondary_Weapon(id, key)
  702.    
  703.     return PLUGIN_HANDLED
  704. }
  705.  
  706. public Buy_Secondary_Weapon(id, selection)
  707. {
  708.     if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
  709.     ((selection == 3) && (ze_get_user_level(id) < 2)) ||
  710.     ((selection == 4) && (ze_get_user_level(id) < 3)) ||
  711.     ((selection == 5) && (ze_get_user_level(id) < 4)) )
  712.     {
  713.         Show_Menu_Buy_Secondary(id)
  714.         return;
  715.     }
  716.  
  717.     static szWeaponName[32]
  718.     ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  719.     new iWeaponId = get_weaponid(szWeaponName)
  720.    
  721.     // Strip and Give Full Weapon
  722.     rg_give_item(id, szWeaponName, GT_REPLACE)
  723.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  724.     ze_giveminigun(id)
  725.  
  726.    
  727.     // Secondary bought
  728.     g_bBoughtSecondary[id] = true
  729. }
  730.  
  731. public Fw_TouchWeapon_Pre(iEnt, id)
  732. {
  733.     if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
  734.         return HAM_IGNORED;
  735.    
  736.     // Not alive or Not Valid Weapon?
  737.     if(!is_user_alive(id) || !pev_valid(iEnt))
  738.         return HAM_IGNORED;
  739.    
  740.     // Get Weapon Model
  741.     new szWeapModel[32]
  742.     pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
  743.    
  744.     // Remove "models/w_" and ".mdl"
  745.     copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
  746.    
  747.     // Set for mp5 to be same as "weapon_mp5navy"
  748.     if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
  749.         szWeapModel = "mp5navy"
  750.    
  751.     // Add "weapon_" to all model names
  752.     static szWeaponEnt[32]
  753.     formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
  754.  
  755.     // Get it's index in Weapon Array
  756.     new iIndex, i
  757.    
  758.     // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
  759.     for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
  760.     {
  761.         new szPrimaryWeapon[32]
  762.         ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
  763.        
  764.         if (equali(szWeaponEnt, szPrimaryWeapon))
  765.             iIndex = i
  766.     }
  767.    
  768.     if (ze_get_user_level(id) == 0 && iIndex > 1)
  769.     {
  770.         return HAM_SUPERCEDE;
  771.     }
  772.    
  773.     for (i = 1; i <= 11; i++)
  774.     {
  775.         if ((ze_get_user_level(id) == i) && iIndex > i+1)
  776.         {
  777.             return HAM_SUPERCEDE;
  778.         }
  779.     }
  780.    
  781.     return HAM_IGNORED;
  782. }
  783.  
  784. // Natives
  785. public native_ze_show_weapon_menu(id)
  786. {
  787.     if (!is_user_connected(id))
  788.     {
  789.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  790.         return false
  791.     }
  792.    
  793.     Cmd_Buy(id)
  794.     return true
  795. }
  796.  
  797. public native_ze_is_auto_buy_enabled(id)
  798. {
  799.     if (!is_user_connected(id))
  800.     {
  801.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  802.         return -1;
  803.     }
  804.    
  805.     return WPN_AUTO_ON;
  806. }
  807.  
  808. public native_ze_disable_auto_buy(id)
  809. {
  810.     if (!is_user_connected(id))
  811.     {
  812.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  813.         return false
  814.     }
  815.    
  816.     WPN_AUTO_ON = 0;
  817.     return true
  818. }
Still ..!
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#9

Post by Mark » 5 years ago

Luxurious wrote: 5 years ago
Mark wrote: 5 years ago
Luxurious wrote: 5 years ago up..!
That is caused by line break to many of these ^n

try this! Post a pic of what it looks like now.....
  1. #include <zombie_escape>
  2. #include <ze_levels>
  3.  
  4. native give_golden_m3(id);
  5. native give_golden_mp5(id);
  6. native give_golden_m4a1(id);
  7. native give_golden_ak47(id);
  8. native ze_giveminigun(id);
  9. native give_thantos5(id);
  10. native give_frost_m4a1(id);
  11. native give_weapon_m32(id);
  12.  
  13.  
  14. // Setting File
  15. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  16.  
  17. // Keys
  18. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  19. const OFFSET_CSMENUCODE = 205
  20.  
  21. // Primary Weapons Entities [Default Values]
  22. new const szPrimaryWeaponEnt[][] =
  23. {
  24.     "weapon_xm1014",  // Level 0
  25.     "weapon_ump45",   // Level 0
  26.     "weapon_m3",      // Level 1
  27.     "weapon_mp5navy", // Level 2
  28.     "weapon_p90",     // Level 3
  29.     "weapon_galil",   // Level 4
  30.     "weapon_famas",   // Level 5
  31.     "weapon_sg550",   // Level 6
  32.     "weapon_g3sg1",   // Level 7
  33.     "weapon_m249",    // Level 8
  34.     "weapon_sg552",   // Level 9
  35.     "weapon_aug",     // Level 10
  36.     "weapon_m4a1",    // Level 11
  37.     "weapon_ak47"     // Level 12
  38. }
  39.  
  40. // Secondary Weapons Entities [Default Values]
  41. new const szSecondaryWeaponEnt[][]=
  42. {
  43.     "weapon_usp",         // Level 0
  44.     "weapon_p228",        // Level 0
  45.     "weapon_glock18",     // Level 1
  46.     "weapon_fiveseven",   // Level 2
  47.     "weapon_deagle",      // Level 3
  48.     "weapon_elite"        // Level 4
  49. }
  50.  
  51. // Primary and Secondary Weapons Names [Default Values]
  52. new const szWeaponNames[][] =
  53. {
  54.     "",
  55.     "P228",
  56.     "",
  57.     "Scout",
  58.     "HE Grenade",
  59.     "XM1014",
  60.     "",
  61.     "MAC-10",
  62.     "AUG",
  63.     "Smoke Grenade",
  64.     "Dual Elite",
  65.     "Five Seven",
  66.     "UMP 45",
  67.     "SG-550",
  68.     "Galil",
  69.     "Famas",
  70.     "USP",
  71.     "Glock",
  72.     "AWP",
  73.     "MP5",
  74.     "M249",
  75.     "M3",
  76.     "M4A1",
  77.     "TMP",
  78.     "G3SG1",
  79.     "Flashbang",
  80.     "Desert Eagle",
  81.     "SG-552",
  82.     "AK-47",
  83.     "",
  84.     "P90"
  85. }
  86.  
  87. // Max Back Clip Ammo (Change it From here if you need)
  88. new const szMaxBPAmmo[] =
  89. {
  90.     -1,
  91.     200,
  92.     -1,
  93.     200,
  94.     1,
  95.     200,
  96.     1,
  97.     200,
  98.     200,
  99.     1,
  100.     200,
  101.     200,
  102.     200,
  103.     200,
  104.     200,
  105.     200,
  106.     200,
  107.     200,
  108.     200,
  109.     200,
  110.     200,
  111.     32,
  112.     200,
  113.     200,
  114.     200,
  115.     2,
  116.     200,
  117.     200,
  118.     200,
  119.     -1,
  120.     200
  121. }
  122.  
  123. // Menu selections
  124. const MENU_KEY_AUTOSELECT = 7
  125. const MENU_KEY_BACK = 7
  126. const MENU_KEY_NEXT = 8
  127. const MENU_KEY_EXIT = 9
  128.  
  129. // Variables
  130. new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
  131.  
  132. new g_iMenuData[33][4],
  133.     Float:g_fBuyTimeStart[33],
  134.     bool:g_bBoughtPrimary[33],
  135.     bool:g_bBoughtSecondary[33],
  136.     WPN_MAXIDS[33]
  137.  
  138. // Define
  139. #define WPN_STARTID g_iMenuData[id][0]
  140. #define WPN_SELECTION (g_iMenuData[id][0]+key)
  141. #define WPN_AUTO_ON g_iMenuData[id][1]
  142. #define WPN_AUTO_PRI g_iMenuData[id][2]
  143. #define WPN_AUTO_SEC g_iMenuData[id][3]
  144.  
  145. // Cvars
  146. new g_pCvarBuyTime,
  147.     g_pCvarHeGrenade,
  148.     g_pCvarSmokeGrenade,
  149.     g_pCvarFlashGrenade,
  150.     g_pCvarBlockWeapLowLevel
  151.  
  152. public plugin_natives()
  153. {
  154.     register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
  155.     register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
  156.     register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
  157. }
  158.  
  159. public plugin_precache()
  160. {
  161.     // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
  162.     g_szPrimaryWeapons = ArrayCreate(32, 1)
  163.     g_szSecondaryWeapons = ArrayCreate(32, 1)
  164.    
  165.     // Load from external file
  166.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  167.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  168.    
  169.     // If we couldn't load from file, use and save default ones
  170.    
  171.     new iIndex
  172.    
  173.     if (ArraySize(g_szPrimaryWeapons) == 0)
  174.     {
  175.         for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
  176.             ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
  177.        
  178.         // If not found .ini File Create it and save default values in it
  179.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  180.     }
  181.    
  182.     if (ArraySize(g_szSecondaryWeapons) == 0)
  183.     {
  184.         for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
  185.             ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
  186.        
  187.         // If not found .ini File Create it and save default values in it
  188.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  189.     }
  190. }
  191.  
  192. public plugin_init()
  193. {
  194.     register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
  195.    
  196.     // Commands
  197.     register_clcmd("guns", "Cmd_Buy")
  198.     register_clcmd("say /enable", "Cmd_Enable")
  199.     register_clcmd("say_team /enable", "Cmd_Enable")
  200.    
  201.     // Cvars
  202.     g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
  203.     g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
  204.     g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
  205.     g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
  206.     g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
  207.    
  208.     // Menus
  209.     register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
  210.     register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
  211.    
  212.     // Hams
  213.     RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
  214.     RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
  215. }
  216.  
  217. public client_disconnected(id)
  218. {
  219.     WPN_AUTO_ON = 0
  220.     WPN_STARTID = 0
  221. }
  222.  
  223. public Cmd_Enable(id)
  224. {
  225.     if (WPN_AUTO_ON)
  226.     {
  227.         ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
  228.         WPN_AUTO_ON = 0
  229.     }
  230. }
  231.  
  232. public Cmd_Buy(id)
  233. {
  234.     // Player Zombie
  235.     if (ze_is_user_zombie(id))
  236.     {
  237.         ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
  238.         return
  239.     }
  240.    
  241.     // Player Dead
  242.     if (!is_user_alive(id))
  243.     {
  244.         ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
  245.         return
  246.     }
  247.    
  248.     // Already bought
  249.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  250.     {
  251.         ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
  252.     }
  253.    
  254.     Show_Available_Buy_Menus(id)
  255. }
  256.  
  257. public ze_user_humanized(id)
  258. {
  259.     // Static Values
  260.     switch (ze_get_user_level(id))
  261.     {
  262.         case 0: WPN_MAXIDS[id] = 2
  263.         case 1: WPN_MAXIDS[id] = 3
  264.         case 2: WPN_MAXIDS[id] = 4
  265.         case 3: WPN_MAXIDS[id] = 5
  266.         case 4: WPN_MAXIDS[id] = 6
  267.         case 5: WPN_MAXIDS[id] = 7
  268.         case 6: WPN_MAXIDS[id] = 8
  269.         case 7: WPN_MAXIDS[id] = 9
  270.         case 8: WPN_MAXIDS[id] = 10
  271.         case 9: WPN_MAXIDS[id] = 11
  272.         case 10: WPN_MAXIDS[id] = 12
  273.         case 11: WPN_MAXIDS[id] = 13
  274.         case 12..14: WPN_MAXIDS[id] = 14
  275.         case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
  276.         case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
  277.         case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
  278.         case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
  279.         case 35: WPN_MAXIDS[id] = 19   // M32
  280.     }
  281.    
  282.     if (ze_get_user_level(id) > 35)
  283.     {
  284.         WPN_MAXIDS[id] = 19
  285.     }
  286.  
  287.     // Buyzone time starts when player is set to human
  288.     g_fBuyTimeStart[id] = get_gametime()
  289.    
  290.     g_bBoughtPrimary[id] = false
  291.     g_bBoughtSecondary[id] = false
  292.    
  293.     // Player dead or zombie
  294.     if (!is_user_alive(id) || ze_is_user_zombie(id))
  295.         return
  296.    
  297.     if (WPN_AUTO_ON)
  298.     {
  299.         ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
  300.         Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  301.         Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
  302.     }
  303.    
  304.     // Open available buy menus
  305.     Show_Available_Buy_Menus(id)
  306.    
  307.     // Give HE Grenade
  308.     if (get_pcvar_num(g_pCvarHeGrenade) != 0)
  309.         rg_give_item(id, "weapon_hegrenade")
  310.    
  311.     // Give Smoke Grenade
  312.     if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
  313.         rg_give_item(id, "weapon_smokegrenade")
  314.    
  315.     // Give Flashbang Grenade
  316.     if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
  317.         rg_give_item(id, "weapon_flashbang")
  318. }
  319.  
  320. public Show_Available_Buy_Menus(id)
  321. {
  322.     // Already Bought
  323.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  324.         return
  325.    
  326.     // Here we use if and else if so we make sure that Primary weapon come first then secondary
  327.     if (!g_bBoughtPrimary[id])
  328.     {
  329.         // Primary    
  330.         Show_Menu_Buy_Primary(id)
  331.     }
  332.     else if (!g_bBoughtSecondary[id])
  333.     {
  334.         // Secondary
  335.         Show_Menu_Buy_Secondary(id)
  336.     }
  337. }
  338.  
  339. public Show_Menu_Buy_Primary(id)
  340. {
  341.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  342.    
  343.     if (iMenuTime <= 0)
  344.     {
  345.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  346.         return
  347.     }
  348.    
  349.     static szMenu[300], szWeaponName[32]
  350.     new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
  351.    
  352.     // Title
  353.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
  354.    
  355.     // 1-7. Weapon List
  356.     for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
  357.     {
  358.         if (ze_get_user_level(id) == 0 && iIndex >= 2||
  359.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  360.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  361.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  362.         ze_get_user_level(id) == 4 && iIndex >= 6 ||
  363.         ze_get_user_level(id) == 5 && iIndex >= 7 ||
  364.         ze_get_user_level(id) == 6 && iIndex >= 8 ||
  365.         ze_get_user_level(id) == 7 && iIndex >= 9 ||
  366.         ze_get_user_level(id) == 8 && iIndex >= 10 ||
  367.         ze_get_user_level(id) == 9 && iIndex >= 11 ||
  368.         ze_get_user_level(id) == 10 && iIndex >= 12 ||
  369.         ze_get_user_level(id) == 11 && iIndex >= 13 ||
  370.         ze_get_user_level(id) == 12 && iIndex >= 14)
  371.         {
  372.             break
  373.         }
  374.        
  375.         /*
  376.         *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
  377.         */
  378.        
  379.         // Golden M3
  380.         if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
  381.         {
  382.             if (iIndex == 14)
  383.             {
  384.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  385.                 break;
  386.             }
  387.         }
  388.        
  389.         // Golden MP5
  390.         if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
  391.         {
  392.             if (iIndex == 14)
  393.             {
  394.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  395.             }
  396.            
  397.             if (iIndex == 15)
  398.             {
  399.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  400.                 break;
  401.             }
  402.         }
  403.        
  404.         // Golden M4A1
  405.         if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
  406.         {
  407.             if (iIndex == 14)
  408.             {
  409.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  410.             }
  411.            
  412.             if (iIndex == 15)
  413.             {
  414.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  415.             }
  416.            
  417.             if (iIndex == 16)
  418.             {
  419.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  420.                 break;
  421.             }
  422.         }
  423.        
  424.         // Golden AK47
  425.         if (ze_get_user_level(id) >= 30)
  426.         {
  427.             if (iIndex == 14)
  428.             {
  429.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  430.             }
  431.            
  432.             if (iIndex == 15)
  433.             {
  434.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  435.             }
  436.            
  437.             if (iIndex == 16)
  438.             {
  439.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  440.             }
  441.            
  442.             if (iIndex == 17)
  443.             {
  444.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
  445.             }
  446.         }
  447.  
  448.         if (iIndex == 18)
  449.         {
  450.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
  451.             break;
  452.         }
  453.        
  454.         // Must check if iIndex < 14 means max is AK47
  455.         if (iIndex < 14)
  456.         {
  457.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  458.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
  459.         }
  460.  
  461.         if (iIndex < 7)
  462.         {
  463.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  464.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  465.         }
  466.     }
  467.    
  468.     if (ze_get_user_level(id) == 5)
  469.     {
  470.         ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
  471.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  472.     }
  473.     else if (ze_get_user_level(id) == 6)
  474.     {
  475.         ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
  476.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  477.     }
  478.     else if (ze_get_user_level(id) == 7)
  479.     {
  480.         ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
  481.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  482.     }
  483.     else if (ze_get_user_level(id) == 8)
  484.     {
  485.         ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
  486.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  487.     }
  488.     else if (ze_get_user_level(id) == 9)
  489.     {
  490.         ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
  491.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  492.     }
  493.     else if (ze_get_user_level(id) == 10)
  494.     {
  495.         ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
  496.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  497.     }
  498.     else if (ze_get_user_level(id) == 11)
  499.     {
  500.         ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
  501.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  502.     }
  503.     else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
  504.     {
  505.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
  506.     }
  507.     else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
  508.     {
  509.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
  510.     }
  511.     else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
  512.     {
  513.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
  514.     }
  515.     else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
  516.     {
  517.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
  518.     }
  519.     else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
  520.     {
  521.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
  522.     }
  523.    
  524.    
  525.  
  526.     // 8. Auto Select
  527.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  528.    
  529.     // 9. Next/Back - 0. Exit
  530.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
  531.    
  532.     // Fix for AMXX custom menus
  533.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  534.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
  535. }
  536.  
  537. public Show_Menu_Buy_Secondary(id)
  538. {
  539.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  540.    
  541.     if (iMenuTime <= 0)
  542.     {
  543.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  544.         return
  545.     }
  546.    
  547.     static szMenu[250], szWeaponName[32]
  548.     new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
  549.    
  550.     // Title
  551.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
  552.    
  553.     // 1-6. Weapon List
  554.     for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
  555.     {
  556.         if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
  557.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  558.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  559.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  560.         ze_get_user_level(id) == 4 && iIndex >= 6)
  561.         {
  562.             break
  563.         }
  564.        
  565.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  566.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
  567.     }
  568.    
  569.     if (iIndex < ArraySize(g_szSecondaryWeapons))
  570.     {
  571.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  572.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  573.     }
  574.    
  575.     // 8. Auto Select
  576.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  577.    
  578.     // 0. Exit
  579.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
  580.    
  581.     // Fix for AMXX custom menus
  582.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  583.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
  584. }
  585.  
  586. public Menu_Buy_Primary(id, key)
  587. {
  588.     // Player dead or zombie or already bought primary
  589.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
  590.         return PLUGIN_HANDLED
  591.    
  592.     // Special keys / weapon list exceeded
  593.     if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
  594.     {
  595.         switch (key)
  596.         {
  597.             case MENU_KEY_AUTOSELECT: // toggle auto select
  598.             {
  599.                 WPN_AUTO_ON = 1 - WPN_AUTO_ON
  600.             }
  601.             case MENU_KEY_NEXT: // next/back
  602.             {
  603.                 if (WPN_STARTID+7 < WPN_MAXIDS[id])
  604.                     WPN_STARTID += 7
  605.                 else
  606.                     WPN_STARTID = 0
  607.             }
  608.             case MENU_KEY_EXIT: // exit
  609.             {
  610.                 return PLUGIN_HANDLED
  611.             }
  612.         }
  613.        
  614.         // Show buy menu again
  615.         Show_Menu_Buy_Primary(id)
  616.         return PLUGIN_HANDLED
  617.     }
  618.    
  619.     // Store selected weapon id
  620.     WPN_AUTO_PRI = WPN_SELECTION
  621.    
  622.     // Buy primary weapon
  623.     Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  624.    
  625.     // Show Secondary Weapons
  626.     Show_Available_Buy_Menus(id)
  627.    
  628.     return PLUGIN_HANDLED
  629. }
  630.  
  631. public Buy_Primary_Weapon(id, selection)
  632. {
  633.     if (selection == 14) // Frost M4A1
  634.     {
  635.         give_frost_m4a1(id)
  636.         g_bBoughtPrimary[id] = true
  637.         return true;
  638.     }
  639.     else if (selection == 15) // Golden MP5
  640.     {
  641.         give_golden_mp5(id)
  642.         g_bBoughtPrimary[id] = true
  643.         return true;
  644.     }
  645.     else if (selection == 16) // Golden M4A1
  646.     {
  647.         give_golden_m4a1(id)
  648.         g_bBoughtPrimary[id] = true
  649.         return true;
  650.     }
  651.     else if (selection == 17) // Thantos-5
  652.     {
  653.         give_thantos5(id)
  654.         g_bBoughtPrimary[id] = true
  655.         return true;
  656.     }
  657.     else if (selection == 18) // M32
  658.     {
  659.         give_weapon_m32(id)
  660.         g_bBoughtPrimary[id] = true
  661.         return true;
  662.     }  
  663.    
  664.     static szWeaponName[32]
  665.     ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  666.     new iWeaponId = get_weaponid(szWeaponName)
  667.    
  668.     // Strip and Give Full Weapon
  669.     rg_give_item(id, szWeaponName, GT_REPLACE)
  670.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  671.    
  672.     // Primary bought
  673.     g_bBoughtPrimary[id] = true
  674.     return true;
  675. }
  676.  
  677. public Menu_Buy_Secondary(id, key)
  678. {
  679.     // Player dead or zombie or already bought secondary
  680.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
  681.         return PLUGIN_HANDLED
  682.    
  683.     // Special keys / weapon list exceeded
  684.     if (key >= ArraySize(g_szSecondaryWeapons))
  685.     {
  686.         // Toggle autoselect
  687.         if (key == MENU_KEY_AUTOSELECT)
  688.             WPN_AUTO_ON = 1 - WPN_AUTO_ON
  689.        
  690.         // Reshow menu unless user exited
  691.         if (key != MENU_KEY_EXIT)
  692.             Show_Menu_Buy_Secondary(id)
  693.        
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     // Store selected weapon id
  698.     WPN_AUTO_SEC = key
  699.    
  700.     // Buy secondary weapon
  701.     Buy_Secondary_Weapon(id, key)
  702.    
  703.     return PLUGIN_HANDLED
  704. }
  705.  
  706. public Buy_Secondary_Weapon(id, selection)
  707. {
  708.     if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
  709.     ((selection == 3) && (ze_get_user_level(id) < 2)) ||
  710.     ((selection == 4) && (ze_get_user_level(id) < 3)) ||
  711.     ((selection == 5) && (ze_get_user_level(id) < 4)) )
  712.     {
  713.         Show_Menu_Buy_Secondary(id)
  714.         return;
  715.     }
  716.  
  717.     static szWeaponName[32]
  718.     ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  719.     new iWeaponId = get_weaponid(szWeaponName)
  720.    
  721.     // Strip and Give Full Weapon
  722.     rg_give_item(id, szWeaponName, GT_REPLACE)
  723.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  724.     ze_giveminigun(id)
  725.  
  726.    
  727.     // Secondary bought
  728.     g_bBoughtSecondary[id] = true
  729. }
  730.  
  731. public Fw_TouchWeapon_Pre(iEnt, id)
  732. {
  733.     if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
  734.         return HAM_IGNORED;
  735.    
  736.     // Not alive or Not Valid Weapon?
  737.     if(!is_user_alive(id) || !pev_valid(iEnt))
  738.         return HAM_IGNORED;
  739.    
  740.     // Get Weapon Model
  741.     new szWeapModel[32]
  742.     pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
  743.    
  744.     // Remove "models/w_" and ".mdl"
  745.     copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
  746.    
  747.     // Set for mp5 to be same as "weapon_mp5navy"
  748.     if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
  749.         szWeapModel = "mp5navy"
  750.    
  751.     // Add "weapon_" to all model names
  752.     static szWeaponEnt[32]
  753.     formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
  754.  
  755.     // Get it's index in Weapon Array
  756.     new iIndex, i
  757.    
  758.     // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
  759.     for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
  760.     {
  761.         new szPrimaryWeapon[32]
  762.         ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
  763.        
  764.         if (equali(szWeaponEnt, szPrimaryWeapon))
  765.             iIndex = i
  766.     }
  767.    
  768.     if (ze_get_user_level(id) == 0 && iIndex > 1)
  769.     {
  770.         return HAM_SUPERCEDE;
  771.     }
  772.    
  773.     for (i = 1; i <= 11; i++)
  774.     {
  775.         if ((ze_get_user_level(id) == i) && iIndex > i+1)
  776.         {
  777.             return HAM_SUPERCEDE;
  778.         }
  779.     }
  780.    
  781.     return HAM_IGNORED;
  782. }
  783.  
  784. // Natives
  785. public native_ze_show_weapon_menu(id)
  786. {
  787.     if (!is_user_connected(id))
  788.     {
  789.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  790.         return false
  791.     }
  792.    
  793.     Cmd_Buy(id)
  794.     return true
  795. }
  796.  
  797. public native_ze_is_auto_buy_enabled(id)
  798. {
  799.     if (!is_user_connected(id))
  800.     {
  801.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  802.         return -1;
  803.     }
  804.    
  805.     return WPN_AUTO_ON;
  806. }
  807.  
  808. public native_ze_disable_auto_buy(id)
  809. {
  810.     if (!is_user_connected(id))
  811.     {
  812.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  813.         return false
  814.     }
  815.    
  816.     WPN_AUTO_ON = 0;
  817.     return true
  818. }
Still ..!
Well since you did not post a picture of what it looks like now I can’t help you.

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#10

Post by Luxurious » 5 years ago

Mark wrote: 5 years ago
Luxurious wrote: 5 years ago
Mark wrote: 5 years ago

That is caused by line break to many of these ^n

try this! Post a pic of what it looks like now.....
  1. #include <zombie_escape>
  2. #include <ze_levels>
  3.  
  4. native give_golden_m3(id);
  5. native give_golden_mp5(id);
  6. native give_golden_m4a1(id);
  7. native give_golden_ak47(id);
  8. native ze_giveminigun(id);
  9. native give_thantos5(id);
  10. native give_frost_m4a1(id);
  11. native give_weapon_m32(id);
  12.  
  13.  
  14. // Setting File
  15. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  16.  
  17. // Keys
  18. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  19. const OFFSET_CSMENUCODE = 205
  20.  
  21. // Primary Weapons Entities [Default Values]
  22. new const szPrimaryWeaponEnt[][] =
  23. {
  24.     "weapon_xm1014",  // Level 0
  25.     "weapon_ump45",   // Level 0
  26.     "weapon_m3",      // Level 1
  27.     "weapon_mp5navy", // Level 2
  28.     "weapon_p90",     // Level 3
  29.     "weapon_galil",   // Level 4
  30.     "weapon_famas",   // Level 5
  31.     "weapon_sg550",   // Level 6
  32.     "weapon_g3sg1",   // Level 7
  33.     "weapon_m249",    // Level 8
  34.     "weapon_sg552",   // Level 9
  35.     "weapon_aug",     // Level 10
  36.     "weapon_m4a1",    // Level 11
  37.     "weapon_ak47"     // Level 12
  38. }
  39.  
  40. // Secondary Weapons Entities [Default Values]
  41. new const szSecondaryWeaponEnt[][]=
  42. {
  43.     "weapon_usp",         // Level 0
  44.     "weapon_p228",        // Level 0
  45.     "weapon_glock18",     // Level 1
  46.     "weapon_fiveseven",   // Level 2
  47.     "weapon_deagle",      // Level 3
  48.     "weapon_elite"        // Level 4
  49. }
  50.  
  51. // Primary and Secondary Weapons Names [Default Values]
  52. new const szWeaponNames[][] =
  53. {
  54.     "",
  55.     "P228",
  56.     "",
  57.     "Scout",
  58.     "HE Grenade",
  59.     "XM1014",
  60.     "",
  61.     "MAC-10",
  62.     "AUG",
  63.     "Smoke Grenade",
  64.     "Dual Elite",
  65.     "Five Seven",
  66.     "UMP 45",
  67.     "SG-550",
  68.     "Galil",
  69.     "Famas",
  70.     "USP",
  71.     "Glock",
  72.     "AWP",
  73.     "MP5",
  74.     "M249",
  75.     "M3",
  76.     "M4A1",
  77.     "TMP",
  78.     "G3SG1",
  79.     "Flashbang",
  80.     "Desert Eagle",
  81.     "SG-552",
  82.     "AK-47",
  83.     "",
  84.     "P90"
  85. }
  86.  
  87. // Max Back Clip Ammo (Change it From here if you need)
  88. new const szMaxBPAmmo[] =
  89. {
  90.     -1,
  91.     200,
  92.     -1,
  93.     200,
  94.     1,
  95.     200,
  96.     1,
  97.     200,
  98.     200,
  99.     1,
  100.     200,
  101.     200,
  102.     200,
  103.     200,
  104.     200,
  105.     200,
  106.     200,
  107.     200,
  108.     200,
  109.     200,
  110.     200,
  111.     32,
  112.     200,
  113.     200,
  114.     200,
  115.     2,
  116.     200,
  117.     200,
  118.     200,
  119.     -1,
  120.     200
  121. }
  122.  
  123. // Menu selections
  124. const MENU_KEY_AUTOSELECT = 7
  125. const MENU_KEY_BACK = 7
  126. const MENU_KEY_NEXT = 8
  127. const MENU_KEY_EXIT = 9
  128.  
  129. // Variables
  130. new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
  131.  
  132. new g_iMenuData[33][4],
  133.     Float:g_fBuyTimeStart[33],
  134.     bool:g_bBoughtPrimary[33],
  135.     bool:g_bBoughtSecondary[33],
  136.     WPN_MAXIDS[33]
  137.  
  138. // Define
  139. #define WPN_STARTID g_iMenuData[id][0]
  140. #define WPN_SELECTION (g_iMenuData[id][0]+key)
  141. #define WPN_AUTO_ON g_iMenuData[id][1]
  142. #define WPN_AUTO_PRI g_iMenuData[id][2]
  143. #define WPN_AUTO_SEC g_iMenuData[id][3]
  144.  
  145. // Cvars
  146. new g_pCvarBuyTime,
  147.     g_pCvarHeGrenade,
  148.     g_pCvarSmokeGrenade,
  149.     g_pCvarFlashGrenade,
  150.     g_pCvarBlockWeapLowLevel
  151.  
  152. public plugin_natives()
  153. {
  154.     register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
  155.     register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
  156.     register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
  157. }
  158.  
  159. public plugin_precache()
  160. {
  161.     // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
  162.     g_szPrimaryWeapons = ArrayCreate(32, 1)
  163.     g_szSecondaryWeapons = ArrayCreate(32, 1)
  164.    
  165.     // Load from external file
  166.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  167.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  168.    
  169.     // If we couldn't load from file, use and save default ones
  170.    
  171.     new iIndex
  172.    
  173.     if (ArraySize(g_szPrimaryWeapons) == 0)
  174.     {
  175.         for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
  176.             ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
  177.        
  178.         // If not found .ini File Create it and save default values in it
  179.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  180.     }
  181.    
  182.     if (ArraySize(g_szSecondaryWeapons) == 0)
  183.     {
  184.         for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
  185.             ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
  186.        
  187.         // If not found .ini File Create it and save default values in it
  188.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  189.     }
  190. }
  191.  
  192. public plugin_init()
  193. {
  194.     register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
  195.    
  196.     // Commands
  197.     register_clcmd("guns", "Cmd_Buy")
  198.     register_clcmd("say /enable", "Cmd_Enable")
  199.     register_clcmd("say_team /enable", "Cmd_Enable")
  200.    
  201.     // Cvars
  202.     g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
  203.     g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
  204.     g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
  205.     g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
  206.     g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
  207.    
  208.     // Menus
  209.     register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
  210.     register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
  211.    
  212.     // Hams
  213.     RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
  214.     RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
  215. }
  216.  
  217. public client_disconnected(id)
  218. {
  219.     WPN_AUTO_ON = 0
  220.     WPN_STARTID = 0
  221. }
  222.  
  223. public Cmd_Enable(id)
  224. {
  225.     if (WPN_AUTO_ON)
  226.     {
  227.         ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
  228.         WPN_AUTO_ON = 0
  229.     }
  230. }
  231.  
  232. public Cmd_Buy(id)
  233. {
  234.     // Player Zombie
  235.     if (ze_is_user_zombie(id))
  236.     {
  237.         ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
  238.         return
  239.     }
  240.    
  241.     // Player Dead
  242.     if (!is_user_alive(id))
  243.     {
  244.         ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
  245.         return
  246.     }
  247.    
  248.     // Already bought
  249.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  250.     {
  251.         ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
  252.     }
  253.    
  254.     Show_Available_Buy_Menus(id)
  255. }
  256.  
  257. public ze_user_humanized(id)
  258. {
  259.     // Static Values
  260.     switch (ze_get_user_level(id))
  261.     {
  262.         case 0: WPN_MAXIDS[id] = 2
  263.         case 1: WPN_MAXIDS[id] = 3
  264.         case 2: WPN_MAXIDS[id] = 4
  265.         case 3: WPN_MAXIDS[id] = 5
  266.         case 4: WPN_MAXIDS[id] = 6
  267.         case 5: WPN_MAXIDS[id] = 7
  268.         case 6: WPN_MAXIDS[id] = 8
  269.         case 7: WPN_MAXIDS[id] = 9
  270.         case 8: WPN_MAXIDS[id] = 10
  271.         case 9: WPN_MAXIDS[id] = 11
  272.         case 10: WPN_MAXIDS[id] = 12
  273.         case 11: WPN_MAXIDS[id] = 13
  274.         case 12..14: WPN_MAXIDS[id] = 14
  275.         case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
  276.         case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
  277.         case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
  278.         case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
  279.         case 35: WPN_MAXIDS[id] = 19   // M32
  280.     }
  281.    
  282.     if (ze_get_user_level(id) > 35)
  283.     {
  284.         WPN_MAXIDS[id] = 19
  285.     }
  286.  
  287.     // Buyzone time starts when player is set to human
  288.     g_fBuyTimeStart[id] = get_gametime()
  289.    
  290.     g_bBoughtPrimary[id] = false
  291.     g_bBoughtSecondary[id] = false
  292.    
  293.     // Player dead or zombie
  294.     if (!is_user_alive(id) || ze_is_user_zombie(id))
  295.         return
  296.    
  297.     if (WPN_AUTO_ON)
  298.     {
  299.         ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
  300.         Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  301.         Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
  302.     }
  303.    
  304.     // Open available buy menus
  305.     Show_Available_Buy_Menus(id)
  306.    
  307.     // Give HE Grenade
  308.     if (get_pcvar_num(g_pCvarHeGrenade) != 0)
  309.         rg_give_item(id, "weapon_hegrenade")
  310.    
  311.     // Give Smoke Grenade
  312.     if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
  313.         rg_give_item(id, "weapon_smokegrenade")
  314.    
  315.     // Give Flashbang Grenade
  316.     if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
  317.         rg_give_item(id, "weapon_flashbang")
  318. }
  319.  
  320. public Show_Available_Buy_Menus(id)
  321. {
  322.     // Already Bought
  323.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  324.         return
  325.    
  326.     // Here we use if and else if so we make sure that Primary weapon come first then secondary
  327.     if (!g_bBoughtPrimary[id])
  328.     {
  329.         // Primary    
  330.         Show_Menu_Buy_Primary(id)
  331.     }
  332.     else if (!g_bBoughtSecondary[id])
  333.     {
  334.         // Secondary
  335.         Show_Menu_Buy_Secondary(id)
  336.     }
  337. }
  338.  
  339. public Show_Menu_Buy_Primary(id)
  340. {
  341.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  342.    
  343.     if (iMenuTime <= 0)
  344.     {
  345.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  346.         return
  347.     }
  348.    
  349.     static szMenu[300], szWeaponName[32]
  350.     new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
  351.    
  352.     // Title
  353.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
  354.    
  355.     // 1-7. Weapon List
  356.     for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
  357.     {
  358.         if (ze_get_user_level(id) == 0 && iIndex >= 2||
  359.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  360.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  361.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  362.         ze_get_user_level(id) == 4 && iIndex >= 6 ||
  363.         ze_get_user_level(id) == 5 && iIndex >= 7 ||
  364.         ze_get_user_level(id) == 6 && iIndex >= 8 ||
  365.         ze_get_user_level(id) == 7 && iIndex >= 9 ||
  366.         ze_get_user_level(id) == 8 && iIndex >= 10 ||
  367.         ze_get_user_level(id) == 9 && iIndex >= 11 ||
  368.         ze_get_user_level(id) == 10 && iIndex >= 12 ||
  369.         ze_get_user_level(id) == 11 && iIndex >= 13 ||
  370.         ze_get_user_level(id) == 12 && iIndex >= 14)
  371.         {
  372.             break
  373.         }
  374.        
  375.         /*
  376.         *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
  377.         */
  378.        
  379.         // Golden M3
  380.         if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
  381.         {
  382.             if (iIndex == 14)
  383.             {
  384.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  385.                 break;
  386.             }
  387.         }
  388.        
  389.         // Golden MP5
  390.         if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
  391.         {
  392.             if (iIndex == 14)
  393.             {
  394.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  395.             }
  396.            
  397.             if (iIndex == 15)
  398.             {
  399.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  400.                 break;
  401.             }
  402.         }
  403.        
  404.         // Golden M4A1
  405.         if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
  406.         {
  407.             if (iIndex == 14)
  408.             {
  409.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  410.             }
  411.            
  412.             if (iIndex == 15)
  413.             {
  414.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  415.             }
  416.            
  417.             if (iIndex == 16)
  418.             {
  419.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  420.                 break;
  421.             }
  422.         }
  423.        
  424.         // Golden AK47
  425.         if (ze_get_user_level(id) >= 30)
  426.         {
  427.             if (iIndex == 14)
  428.             {
  429.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Frost M4A1")
  430.             }
  431.            
  432.             if (iIndex == 15)
  433.             {
  434.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
  435.             }
  436.            
  437.             if (iIndex == 16)
  438.             {
  439.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
  440.             }
  441.            
  442.             if (iIndex == 17)
  443.             {
  444.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Thantos-5")
  445.             }
  446.         }
  447.  
  448.         if (iIndex == 18)
  449.         {
  450.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "M32")
  451.             break;
  452.         }
  453.        
  454.         // Must check if iIndex < 14 means max is AK47
  455.         if (iIndex < 14)
  456.         {
  457.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  458.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
  459.         }
  460.  
  461.         if (iIndex < 7)
  462.         {
  463.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  464.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  465.         }
  466.     }
  467.    
  468.     if (ze_get_user_level(id) == 5)
  469.     {
  470.         ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
  471.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  472.     }
  473.     else if (ze_get_user_level(id) == 6)
  474.     {
  475.         ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
  476.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  477.     }
  478.     else if (ze_get_user_level(id) == 7)
  479.     {
  480.         ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
  481.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  482.     }
  483.     else if (ze_get_user_level(id) == 8)
  484.     {
  485.         ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
  486.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  487.     }
  488.     else if (ze_get_user_level(id) == 9)
  489.     {
  490.         ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
  491.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  492.     }
  493.     else if (ze_get_user_level(id) == 10)
  494.     {
  495.         ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
  496.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  497.     }
  498.     else if (ze_get_user_level(id) == 11)
  499.     {
  500.         ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
  501.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
  502.     }
  503.     else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
  504.     {
  505.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yFrost M4A1^n")
  506.     }
  507.     else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
  508.     {
  509.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
  510.     }
  511.     else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
  512.     {
  513.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
  514.     }
  515.     else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
  516.     {
  517.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yThantos-5^n")
  518.     }
  519.     else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
  520.     {
  521.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yM32^n")
  522.     }
  523.    
  524.    
  525.  
  526.     // 8. Auto Select
  527.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  528.    
  529.     // 9. Next/Back - 0. Exit
  530.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
  531.    
  532.     // Fix for AMXX custom menus
  533.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  534.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
  535. }
  536.  
  537. public Show_Menu_Buy_Secondary(id)
  538. {
  539.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  540.    
  541.     if (iMenuTime <= 0)
  542.     {
  543.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  544.         return
  545.     }
  546.    
  547.     static szMenu[250], szWeaponName[32]
  548.     new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
  549.    
  550.     // Title
  551.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
  552.    
  553.     // 1-6. Weapon List
  554.     for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
  555.     {
  556.         if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
  557.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  558.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  559.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  560.         ze_get_user_level(id) == 4 && iIndex >= 6)
  561.         {
  562.             break
  563.         }
  564.        
  565.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  566.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
  567.     }
  568.    
  569.     if (iIndex < ArraySize(g_szSecondaryWeapons))
  570.     {
  571.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  572.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  573.     }
  574.    
  575.     // 8. Auto Select
  576.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  577.    
  578.     // 0. Exit
  579.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
  580.    
  581.     // Fix for AMXX custom menus
  582.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  583.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
  584. }
  585.  
  586. public Menu_Buy_Primary(id, key)
  587. {
  588.     // Player dead or zombie or already bought primary
  589.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
  590.         return PLUGIN_HANDLED
  591.    
  592.     // Special keys / weapon list exceeded
  593.     if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
  594.     {
  595.         switch (key)
  596.         {
  597.             case MENU_KEY_AUTOSELECT: // toggle auto select
  598.             {
  599.                 WPN_AUTO_ON = 1 - WPN_AUTO_ON
  600.             }
  601.             case MENU_KEY_NEXT: // next/back
  602.             {
  603.                 if (WPN_STARTID+7 < WPN_MAXIDS[id])
  604.                     WPN_STARTID += 7
  605.                 else
  606.                     WPN_STARTID = 0
  607.             }
  608.             case MENU_KEY_EXIT: // exit
  609.             {
  610.                 return PLUGIN_HANDLED
  611.             }
  612.         }
  613.        
  614.         // Show buy menu again
  615.         Show_Menu_Buy_Primary(id)
  616.         return PLUGIN_HANDLED
  617.     }
  618.    
  619.     // Store selected weapon id
  620.     WPN_AUTO_PRI = WPN_SELECTION
  621.    
  622.     // Buy primary weapon
  623.     Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  624.    
  625.     // Show Secondary Weapons
  626.     Show_Available_Buy_Menus(id)
  627.    
  628.     return PLUGIN_HANDLED
  629. }
  630.  
  631. public Buy_Primary_Weapon(id, selection)
  632. {
  633.     if (selection == 14) // Frost M4A1
  634.     {
  635.         give_frost_m4a1(id)
  636.         g_bBoughtPrimary[id] = true
  637.         return true;
  638.     }
  639.     else if (selection == 15) // Golden MP5
  640.     {
  641.         give_golden_mp5(id)
  642.         g_bBoughtPrimary[id] = true
  643.         return true;
  644.     }
  645.     else if (selection == 16) // Golden M4A1
  646.     {
  647.         give_golden_m4a1(id)
  648.         g_bBoughtPrimary[id] = true
  649.         return true;
  650.     }
  651.     else if (selection == 17) // Thantos-5
  652.     {
  653.         give_thantos5(id)
  654.         g_bBoughtPrimary[id] = true
  655.         return true;
  656.     }
  657.     else if (selection == 18) // M32
  658.     {
  659.         give_weapon_m32(id)
  660.         g_bBoughtPrimary[id] = true
  661.         return true;
  662.     }  
  663.    
  664.     static szWeaponName[32]
  665.     ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  666.     new iWeaponId = get_weaponid(szWeaponName)
  667.    
  668.     // Strip and Give Full Weapon
  669.     rg_give_item(id, szWeaponName, GT_REPLACE)
  670.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  671.    
  672.     // Primary bought
  673.     g_bBoughtPrimary[id] = true
  674.     return true;
  675. }
  676.  
  677. public Menu_Buy_Secondary(id, key)
  678. {
  679.     // Player dead or zombie or already bought secondary
  680.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
  681.         return PLUGIN_HANDLED
  682.    
  683.     // Special keys / weapon list exceeded
  684.     if (key >= ArraySize(g_szSecondaryWeapons))
  685.     {
  686.         // Toggle autoselect
  687.         if (key == MENU_KEY_AUTOSELECT)
  688.             WPN_AUTO_ON = 1 - WPN_AUTO_ON
  689.        
  690.         // Reshow menu unless user exited
  691.         if (key != MENU_KEY_EXIT)
  692.             Show_Menu_Buy_Secondary(id)
  693.        
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     // Store selected weapon id
  698.     WPN_AUTO_SEC = key
  699.    
  700.     // Buy secondary weapon
  701.     Buy_Secondary_Weapon(id, key)
  702.    
  703.     return PLUGIN_HANDLED
  704. }
  705.  
  706. public Buy_Secondary_Weapon(id, selection)
  707. {
  708.     if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
  709.     ((selection == 3) && (ze_get_user_level(id) < 2)) ||
  710.     ((selection == 4) && (ze_get_user_level(id) < 3)) ||
  711.     ((selection == 5) && (ze_get_user_level(id) < 4)) )
  712.     {
  713.         Show_Menu_Buy_Secondary(id)
  714.         return;
  715.     }
  716.  
  717.     static szWeaponName[32]
  718.     ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  719.     new iWeaponId = get_weaponid(szWeaponName)
  720.    
  721.     // Strip and Give Full Weapon
  722.     rg_give_item(id, szWeaponName, GT_REPLACE)
  723.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  724.     ze_giveminigun(id)
  725.  
  726.    
  727.     // Secondary bought
  728.     g_bBoughtSecondary[id] = true
  729. }
  730.  
  731. public Fw_TouchWeapon_Pre(iEnt, id)
  732. {
  733.     if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
  734.         return HAM_IGNORED;
  735.    
  736.     // Not alive or Not Valid Weapon?
  737.     if(!is_user_alive(id) || !pev_valid(iEnt))
  738.         return HAM_IGNORED;
  739.    
  740.     // Get Weapon Model
  741.     new szWeapModel[32]
  742.     pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
  743.    
  744.     // Remove "models/w_" and ".mdl"
  745.     copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
  746.    
  747.     // Set for mp5 to be same as "weapon_mp5navy"
  748.     if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
  749.         szWeapModel = "mp5navy"
  750.    
  751.     // Add "weapon_" to all model names
  752.     static szWeaponEnt[32]
  753.     formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
  754.  
  755.     // Get it's index in Weapon Array
  756.     new iIndex, i
  757.    
  758.     // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
  759.     for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
  760.     {
  761.         new szPrimaryWeapon[32]
  762.         ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
  763.        
  764.         if (equali(szWeaponEnt, szPrimaryWeapon))
  765.             iIndex = i
  766.     }
  767.    
  768.     if (ze_get_user_level(id) == 0 && iIndex > 1)
  769.     {
  770.         return HAM_SUPERCEDE;
  771.     }
  772.    
  773.     for (i = 1; i <= 11; i++)
  774.     {
  775.         if ((ze_get_user_level(id) == i) && iIndex > i+1)
  776.         {
  777.             return HAM_SUPERCEDE;
  778.         }
  779.     }
  780.    
  781.     return HAM_IGNORED;
  782. }
  783.  
  784. // Natives
  785. public native_ze_show_weapon_menu(id)
  786. {
  787.     if (!is_user_connected(id))
  788.     {
  789.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  790.         return false
  791.     }
  792.    
  793.     Cmd_Buy(id)
  794.     return true
  795. }
  796.  
  797. public native_ze_is_auto_buy_enabled(id)
  798. {
  799.     if (!is_user_connected(id))
  800.     {
  801.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  802.         return -1;
  803.     }
  804.    
  805.     return WPN_AUTO_ON;
  806. }
  807.  
  808. public native_ze_disable_auto_buy(id)
  809. {
  810.     if (!is_user_connected(id))
  811.     {
  812.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  813.         return false
  814.     }
  815.    
  816.     WPN_AUTO_ON = 0;
  817.     return true
  818. }
Still ..!
Well since you did not post a picture of what it looks like now I can’t help you.
Here
Here
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#11

Post by Mark » 5 years ago

Luxurious wrote: 5 years ago
Mark wrote: 5 years ago
Luxurious wrote: 5 years ago

Still ..!
Well since you did not post a picture of what it looks like now I can’t help you.
Capture.JPG
Try and post a picture please!
  1. #include <zombie_escape>
  2. #include <ze_levels>
  3.  
  4. native give_golden_m3(id);
  5. native give_golden_mp5(id);
  6. native give_golden_m4a1(id);
  7. native give_golden_ak47(id);
  8. native ze_giveminigun(id);
  9. native give_thantos5(id);
  10. native give_frost_m4a1(id);
  11. native give_weapon_m32(id);
  12.  
  13.  
  14. // Setting File
  15. new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
  16.  
  17. // Keys
  18. const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
  19. const OFFSET_CSMENUCODE = 205
  20.  
  21. // Primary Weapons Entities [Default Values]
  22. new const szPrimaryWeaponEnt[][] =
  23. {
  24.     "weapon_xm1014",  // Level 0
  25.     "weapon_ump45",   // Level 0
  26.     "weapon_m3",      // Level 1
  27.     "weapon_mp5navy", // Level 2
  28.     "weapon_p90",     // Level 3
  29.     "weapon_galil",   // Level 4
  30.     "weapon_famas",   // Level 5
  31.     "weapon_sg550",   // Level 6
  32.     "weapon_g3sg1",   // Level 7
  33.     "weapon_m249",    // Level 8
  34.     "weapon_sg552",   // Level 9
  35.     "weapon_aug",     // Level 10
  36.     "weapon_m4a1",    // Level 11
  37.     "weapon_ak47"     // Level 12
  38. }
  39.  
  40. // Secondary Weapons Entities [Default Values]
  41. new const szSecondaryWeaponEnt[][]=
  42. {
  43.     "weapon_usp",         // Level 0
  44.     "weapon_p228",        // Level 0
  45.     "weapon_glock18",     // Level 1
  46.     "weapon_fiveseven",   // Level 2
  47.     "weapon_deagle",      // Level 3
  48.     "weapon_elite"        // Level 4
  49. }
  50.  
  51. // Primary and Secondary Weapons Names [Default Values]
  52. new const szWeaponNames[][] =
  53. {
  54.     "",
  55.     "P228",
  56.     "",
  57.     "Scout",
  58.     "HE Grenade",
  59.     "XM1014",
  60.     "",
  61.     "MAC-10",
  62.     "AUG",
  63.     "Smoke Grenade",
  64.     "Dual Elite",
  65.     "Five Seven",
  66.     "UMP 45",
  67.     "SG-550",
  68.     "Galil",
  69.     "Famas",
  70.     "USP",
  71.     "Glock",
  72.     "AWP",
  73.     "MP5",
  74.     "M249",
  75.     "M3",
  76.     "M4A1",
  77.     "TMP",
  78.     "G3SG1",
  79.     "Flashbang",
  80.     "Desert Eagle",
  81.     "SG-552",
  82.     "AK-47",
  83.     "",
  84.     "P90"
  85. }
  86.  
  87. // Max Back Clip Ammo (Change it From here if you need)
  88. new const szMaxBPAmmo[] =
  89. {
  90.     -1,
  91.     200,
  92.     -1,
  93.     200,
  94.     1,
  95.     200,
  96.     1,
  97.     200,
  98.     200,
  99.     1,
  100.     200,
  101.     200,
  102.     200,
  103.     200,
  104.     200,
  105.     200,
  106.     200,
  107.     200,
  108.     200,
  109.     200,
  110.     200,
  111.     32,
  112.     200,
  113.     200,
  114.     200,
  115.     2,
  116.     200,
  117.     200,
  118.     200,
  119.     -1,
  120.     200
  121. }
  122.  
  123. // Menu selections
  124. const MENU_KEY_AUTOSELECT = 7
  125. const MENU_KEY_BACK = 7
  126. const MENU_KEY_NEXT = 8
  127. const MENU_KEY_EXIT = 9
  128.  
  129. // Variables
  130. new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
  131.  
  132. new g_iMenuData[33][4],
  133.     Float:g_fBuyTimeStart[33],
  134.     bool:g_bBoughtPrimary[33],
  135.     bool:g_bBoughtSecondary[33],
  136.     WPN_MAXIDS[33]
  137.  
  138. // Define
  139. #define WPN_STARTID g_iMenuData[id][0]
  140. #define WPN_SELECTION (g_iMenuData[id][0]+key)
  141. #define WPN_AUTO_ON g_iMenuData[id][1]
  142. #define WPN_AUTO_PRI g_iMenuData[id][2]
  143. #define WPN_AUTO_SEC g_iMenuData[id][3]
  144.  
  145. // Cvars
  146. new g_pCvarBuyTime,
  147.     g_pCvarHeGrenade,
  148.     g_pCvarSmokeGrenade,
  149.     g_pCvarFlashGrenade,
  150.     g_pCvarBlockWeapLowLevel
  151.  
  152. public plugin_natives()
  153. {
  154.     register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
  155.     register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
  156.     register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
  157. }
  158.  
  159. public plugin_precache()
  160. {
  161.     // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
  162.     g_szPrimaryWeapons = ArrayCreate(32, 1)
  163.     g_szSecondaryWeapons = ArrayCreate(32, 1)
  164.    
  165.     // Load from external file
  166.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  167.     amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  168.    
  169.     // If we couldn't load from file, use and save default ones
  170.    
  171.     new iIndex
  172.    
  173.     if (ArraySize(g_szPrimaryWeapons) == 0)
  174.     {
  175.         for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
  176.             ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
  177.        
  178.         // If not found .ini File Create it and save default values in it
  179.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
  180.     }
  181.    
  182.     if (ArraySize(g_szSecondaryWeapons) == 0)
  183.     {
  184.         for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
  185.             ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
  186.        
  187.         // If not found .ini File Create it and save default values in it
  188.         amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
  189.     }
  190. }
  191.  
  192. public plugin_init()
  193. {
  194.     register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
  195.    
  196.     // Commands
  197.     register_clcmd("guns", "Cmd_Buy")
  198.     register_clcmd("say /enable", "Cmd_Enable")
  199.     register_clcmd("say_team /enable", "Cmd_Enable")
  200.    
  201.     // Cvars
  202.     g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
  203.     g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
  204.     g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "0")
  205.     g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "0")
  206.     g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
  207.    
  208.     // Menus
  209.     register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
  210.     register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
  211.    
  212.     // Hams
  213.     RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
  214.     RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
  215. }
  216.  
  217. public client_disconnected(id)
  218. {
  219.     WPN_AUTO_ON = 0
  220.     WPN_STARTID = 0
  221. }
  222.  
  223. public Cmd_Enable(id)
  224. {
  225.     if (WPN_AUTO_ON)
  226.     {
  227.         ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
  228.         WPN_AUTO_ON = 0
  229.     }
  230. }
  231.  
  232. public Cmd_Buy(id)
  233. {
  234.     // Player Zombie
  235.     if (ze_is_user_zombie(id))
  236.     {
  237.         ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
  238.         return
  239.     }
  240.    
  241.     // Player Dead
  242.     if (!is_user_alive(id))
  243.     {
  244.         ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
  245.         return
  246.     }
  247.    
  248.     // Already bought
  249.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  250.     {
  251.         ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
  252.     }
  253.    
  254.     Show_Available_Buy_Menus(id)
  255. }
  256.  
  257. public ze_user_humanized(id)
  258. {
  259.     // Static Values
  260.     switch (ze_get_user_level(id))
  261.     {
  262.         case 0: WPN_MAXIDS[id] = 2
  263.         case 1: WPN_MAXIDS[id] = 3
  264.         case 2: WPN_MAXIDS[id] = 4
  265.         case 3: WPN_MAXIDS[id] = 5
  266.         case 4: WPN_MAXIDS[id] = 6
  267.         case 5: WPN_MAXIDS[id] = 7
  268.         case 6: WPN_MAXIDS[id] = 8
  269.         case 7: WPN_MAXIDS[id] = 9
  270.         case 8: WPN_MAXIDS[id] = 10
  271.         case 9: WPN_MAXIDS[id] = 11
  272.         case 10: WPN_MAXIDS[id] = 12
  273.         case 11: WPN_MAXIDS[id] = 13
  274.         case 12..14: WPN_MAXIDS[id] = 14
  275.         case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
  276.         case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
  277.         case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
  278.         case 30..34: WPN_MAXIDS[id] = 18     // Golden AK47
  279.         case 35: WPN_MAXIDS[id] = 19   // M32
  280.     }
  281.    
  282.     if (ze_get_user_level(id) > 35)
  283.     {
  284.         WPN_MAXIDS[id] = 19
  285.     }
  286.  
  287.     // Buyzone time starts when player is set to human
  288.     g_fBuyTimeStart[id] = get_gametime()
  289.    
  290.     g_bBoughtPrimary[id] = false
  291.     g_bBoughtSecondary[id] = false
  292.    
  293.     // Player dead or zombie
  294.     if (!is_user_alive(id) || ze_is_user_zombie(id))
  295.         return
  296.    
  297.     if (WPN_AUTO_ON)
  298.     {
  299.         ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
  300.         Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  301.         Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
  302.     }
  303.    
  304.     // Open available buy menus
  305.     Show_Available_Buy_Menus(id)
  306.    
  307.     // Give HE Grenade
  308.     if (get_pcvar_num(g_pCvarHeGrenade) != 0)
  309.         rg_give_item(id, "weapon_hegrenade")
  310.    
  311.     // Give Smoke Grenade
  312.     if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
  313.         rg_give_item(id, "weapon_smokegrenade")
  314.    
  315.     // Give Flashbang Grenade
  316.     if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
  317.         rg_give_item(id, "weapon_flashbang")
  318. }
  319.  
  320. public Show_Available_Buy_Menus(id)
  321. {
  322.     // Already Bought
  323.     if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
  324.         return
  325.    
  326.     // Here we use if and else if so we make sure that Primary weapon come first then secondary
  327.     if (!g_bBoughtPrimary[id])
  328.     {
  329.         // Primary    
  330.         Show_Menu_Buy_Primary(id)
  331.     }
  332.     else if (!g_bBoughtSecondary[id])
  333.     {
  334.         // Secondary
  335.         Show_Menu_Buy_Secondary(id)
  336.     }
  337. }
  338.  
  339. public Show_Menu_Buy_Primary(id)
  340. {
  341.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  342.    
  343.     if (iMenuTime <= 0)
  344.     {
  345.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  346.         return
  347.     }
  348.    
  349.     static szMenu[300], szWeaponName[32]
  350.     new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
  351.    
  352.     // Title
  353.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
  354.    
  355.     // 1-7. Weapon List
  356.     for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
  357.     {
  358.         if (ze_get_user_level(id) == 0 && iIndex >= 2||
  359.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  360.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  361.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  362.         ze_get_user_level(id) == 4 && iIndex >= 6 ||
  363.         ze_get_user_level(id) == 5 && iIndex >= 7 ||
  364.         ze_get_user_level(id) == 6 && iIndex >= 8 ||
  365.         ze_get_user_level(id) == 7 && iIndex >= 9 ||
  366.         ze_get_user_level(id) == 8 && iIndex >= 10 ||
  367.         ze_get_user_level(id) == 9 && iIndex >= 11 ||
  368.         ze_get_user_level(id) == 10 && iIndex >= 12 ||
  369.         ze_get_user_level(id) == 11 && iIndex >= 13 ||
  370.         ze_get_user_level(id) == 12 && iIndex >= 14)
  371.         {
  372.             break
  373.         }
  374.        
  375.         /*
  376.         *  Note that WPN_MAXIDS start from 1 but iIndex start from 0.
  377.         */
  378.        
  379.         // Golden M3
  380.         if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
  381.         {
  382.             if (iIndex == 14)
  383.             {
  384.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Frost M4A1")
  385.                 break;
  386.             }
  387.         }
  388.        
  389.         // Golden MP5
  390.         if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
  391.         {
  392.             if (iIndex == 14)
  393.             {
  394.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Frost M4A1")
  395.             }
  396.            
  397.             if (iIndex == 15)
  398.             {
  399.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Golden MP5")
  400.                 break;
  401.             }
  402.         }
  403.        
  404.         // Golden M4A1
  405.         if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
  406.         {
  407.             if (iIndex == 14)
  408.             {
  409.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Frost M4A1")
  410.             }
  411.            
  412.             if (iIndex == 15)
  413.             {
  414.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Golden MP5")
  415.             }
  416.            
  417.             if (iIndex == 16)
  418.             {
  419.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Golden M4A1")
  420.                 break;
  421.             }
  422.         }
  423.        
  424.         // Golden AK47
  425.         if (ze_get_user_level(id) >= 30)
  426.         {
  427.             if (iIndex == 14)
  428.             {
  429.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Frost M4A1")
  430.             }
  431.            
  432.             if (iIndex == 15)
  433.             {
  434.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Golden MP5")
  435.             }
  436.            
  437.             if (iIndex == 16)
  438.             {
  439.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Golden M4A1")
  440.             }
  441.            
  442.             if (iIndex == 17)
  443.             {
  444.                 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "Thantos-5")
  445.             }
  446.         }
  447.  
  448.         if (iIndex == 18)
  449.         {
  450.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, "M32")
  451.             break;
  452.         }
  453.        
  454.         // Must check if iIndex < 14 means max is AK47
  455.         if (iIndex < 14)
  456.         {
  457.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  458.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
  459.         }
  460.  
  461.         if (iIndex < 7)
  462.         {
  463.             ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  464.             iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  465.         }
  466.     }
  467.    
  468.     if (ze_get_user_level(id) == 5)
  469.     {
  470.         ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
  471.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  472.     }
  473.     else if (ze_get_user_level(id) == 6)
  474.     {
  475.         ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
  476.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  477.     }
  478.     else if (ze_get_user_level(id) == 7)
  479.     {
  480.         ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
  481.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  482.     }
  483.     else if (ze_get_user_level(id) == 8)
  484.     {
  485.         ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
  486.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  487.     }
  488.     else if (ze_get_user_level(id) == 9)
  489.     {
  490.         ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
  491.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  492.     }
  493.     else if (ze_get_user_level(id) == 10)
  494.     {
  495.         ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
  496.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  497.     }
  498.     else if (ze_get_user_level(id) == 11)
  499.     {
  500.         ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
  501.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  502.     }
  503.     else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
  504.     {
  505.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Level 15 Unlock\w: \yFrost M4A1")
  506.     }
  507.     else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
  508.     {
  509.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Level 20 Unlock\w: \yGolden MP5")
  510.     }
  511.     else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
  512.     {
  513.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Level 25 Unlock\w: \yGolden M4A1")
  514.     }
  515.     else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Thantos-5
  516.     {
  517.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Level 30 Unlock\w: \yThantos-5")
  518.     }
  519.     else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // M32
  520.     {
  521.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r Level 30 Unlock\w: \yM32")
  522.     }
  523.    
  524.    
  525.  
  526.     // 8. Auto Select
  527.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  528.    
  529.     // 9. Next/Back - 0. Exit
  530.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
  531.    
  532.     // Fix for AMXX custom menus
  533.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  534.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
  535. }
  536.  
  537. public Show_Menu_Buy_Secondary(id)
  538. {
  539.     new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
  540.    
  541.     if (iMenuTime <= 0)
  542.     {
  543.         ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
  544.         return
  545.     }
  546.    
  547.     static szMenu[250], szWeaponName[32]
  548.     new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
  549.    
  550.     // Title
  551.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
  552.    
  553.     // 1-6. Weapon List
  554.     for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
  555.     {
  556.         if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
  557.         ze_get_user_level(id) == 1 && iIndex >= 3 ||
  558.         ze_get_user_level(id) == 2 && iIndex >= 4 ||
  559.         ze_get_user_level(id) == 3 && iIndex >= 5 ||
  560.         ze_get_user_level(id) == 4 && iIndex >= 6)
  561.         {
  562.             break
  563.         }
  564.        
  565.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  566.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
  567.     }
  568.    
  569.     if (iIndex < ArraySize(g_szSecondaryWeapons))
  570.     {
  571.         ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
  572.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
  573.     }
  574.    
  575.     // 8. Auto Select
  576.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
  577.    
  578.     // 0. Exit
  579.     iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
  580.    
  581.     // Fix for AMXX custom menus
  582.     set_pdata_int(id, OFFSET_CSMENUCODE, 0)
  583.     show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
  584. }
  585.  
  586. public Menu_Buy_Primary(id, key)
  587. {
  588.     // Player dead or zombie or already bought primary
  589.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
  590.         return PLUGIN_HANDLED
  591.    
  592.     // Special keys / weapon list exceeded
  593.     if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
  594.     {
  595.         switch (key)
  596.         {
  597.             case MENU_KEY_AUTOSELECT: // toggle auto select
  598.             {
  599.                 WPN_AUTO_ON = 1 - WPN_AUTO_ON
  600.             }
  601.             case MENU_KEY_NEXT: // next/back
  602.             {
  603.                 if (WPN_STARTID+7 < WPN_MAXIDS[id])
  604.                     WPN_STARTID += 7
  605.                 else
  606.                     WPN_STARTID = 0
  607.             }
  608.             case MENU_KEY_EXIT: // exit
  609.             {
  610.                 return PLUGIN_HANDLED
  611.             }
  612.         }
  613.        
  614.         // Show buy menu again
  615.         Show_Menu_Buy_Primary(id)
  616.         return PLUGIN_HANDLED
  617.     }
  618.    
  619.     // Store selected weapon id
  620.     WPN_AUTO_PRI = WPN_SELECTION
  621.    
  622.     // Buy primary weapon
  623.     Buy_Primary_Weapon(id, WPN_AUTO_PRI)
  624.    
  625.     // Show Secondary Weapons
  626.     Show_Available_Buy_Menus(id)
  627.    
  628.     return PLUGIN_HANDLED
  629. }
  630.  
  631. public Buy_Primary_Weapon(id, selection)
  632. {
  633.     if (selection == 14) // Frost M4A1
  634.     {
  635.         give_frost_m4a1(id)
  636.         g_bBoughtPrimary[id] = true
  637.         return true;
  638.     }
  639.     else if (selection == 15) // Golden MP5
  640.     {
  641.         give_golden_mp5(id)
  642.         g_bBoughtPrimary[id] = true
  643.         return true;
  644.     }
  645.     else if (selection == 16) // Golden M4A1
  646.     {
  647.         give_golden_m4a1(id)
  648.         g_bBoughtPrimary[id] = true
  649.         return true;
  650.     }
  651.     else if (selection == 17) // Thantos-5
  652.     {
  653.         give_thantos5(id)
  654.         g_bBoughtPrimary[id] = true
  655.         return true;
  656.     }
  657.     else if (selection == 18) // M32
  658.     {
  659.         give_weapon_m32(id)
  660.         g_bBoughtPrimary[id] = true
  661.         return true;
  662.     }  
  663.    
  664.     static szWeaponName[32]
  665.     ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  666.     new iWeaponId = get_weaponid(szWeaponName)
  667.    
  668.     // Strip and Give Full Weapon
  669.     rg_give_item(id, szWeaponName, GT_REPLACE)
  670.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  671.    
  672.     // Primary bought
  673.     g_bBoughtPrimary[id] = true
  674.     return true;
  675. }
  676.  
  677. public Menu_Buy_Secondary(id, key)
  678. {
  679.     // Player dead or zombie or already bought secondary
  680.     if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
  681.         return PLUGIN_HANDLED
  682.    
  683.     // Special keys / weapon list exceeded
  684.     if (key >= ArraySize(g_szSecondaryWeapons))
  685.     {
  686.         // Toggle autoselect
  687.         if (key == MENU_KEY_AUTOSELECT)
  688.             WPN_AUTO_ON = 1 - WPN_AUTO_ON
  689.        
  690.         // Reshow menu unless user exited
  691.         if (key != MENU_KEY_EXIT)
  692.             Show_Menu_Buy_Secondary(id)
  693.        
  694.         return PLUGIN_HANDLED
  695.     }
  696.    
  697.     // Store selected weapon id
  698.     WPN_AUTO_SEC = key
  699.    
  700.     // Buy secondary weapon
  701.     Buy_Secondary_Weapon(id, key)
  702.    
  703.     return PLUGIN_HANDLED
  704. }
  705.  
  706. public Buy_Secondary_Weapon(id, selection)
  707. {
  708.     if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
  709.     ((selection == 3) && (ze_get_user_level(id) < 2)) ||
  710.     ((selection == 4) && (ze_get_user_level(id) < 3)) ||
  711.     ((selection == 5) && (ze_get_user_level(id) < 4)) )
  712.     {
  713.         Show_Menu_Buy_Secondary(id)
  714.         return;
  715.     }
  716.  
  717.     static szWeaponName[32]
  718.     ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
  719.     new iWeaponId = get_weaponid(szWeaponName)
  720.    
  721.     // Strip and Give Full Weapon
  722.     rg_give_item(id, szWeaponName, GT_REPLACE)
  723.     rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
  724.     ze_giveminigun(id)
  725.  
  726.    
  727.     // Secondary bought
  728.     g_bBoughtSecondary[id] = true
  729. }
  730.  
  731. public Fw_TouchWeapon_Pre(iEnt, id)
  732. {
  733.     if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
  734.         return HAM_IGNORED;
  735.    
  736.     // Not alive or Not Valid Weapon?
  737.     if(!is_user_alive(id) || !pev_valid(iEnt))
  738.         return HAM_IGNORED;
  739.    
  740.     // Get Weapon Model
  741.     new szWeapModel[32]
  742.     pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
  743.    
  744.     // Remove "models/w_" and ".mdl"
  745.     copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
  746.    
  747.     // Set for mp5 to be same as "weapon_mp5navy"
  748.     if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
  749.         szWeapModel = "mp5navy"
  750.    
  751.     // Add "weapon_" to all model names
  752.     static szWeaponEnt[32]
  753.     formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
  754.  
  755.     // Get it's index in Weapon Array
  756.     new iIndex, i
  757.    
  758.     // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
  759.     for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
  760.     {
  761.         new szPrimaryWeapon[32]
  762.         ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
  763.        
  764.         if (equali(szWeaponEnt, szPrimaryWeapon))
  765.             iIndex = i
  766.     }
  767.    
  768.     if (ze_get_user_level(id) == 0 && iIndex > 1)
  769.     {
  770.         return HAM_SUPERCEDE;
  771.     }
  772.    
  773.     for (i = 1; i <= 11; i++)
  774.     {
  775.         if ((ze_get_user_level(id) == i) && iIndex > i+1)
  776.         {
  777.             return HAM_SUPERCEDE;
  778.         }
  779.     }
  780.    
  781.     return HAM_IGNORED;
  782. }
  783.  
  784. // Natives
  785. public native_ze_show_weapon_menu(id)
  786. {
  787.     if (!is_user_connected(id))
  788.     {
  789.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  790.         return false
  791.     }
  792.    
  793.     Cmd_Buy(id)
  794.     return true
  795. }
  796.  
  797. public native_ze_is_auto_buy_enabled(id)
  798. {
  799.     if (!is_user_connected(id))
  800.     {
  801.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  802.         return -1;
  803.     }
  804.    
  805.     return WPN_AUTO_ON;
  806. }
  807.  
  808. public native_ze_disable_auto_buy(id)
  809. {
  810.     if (!is_user_connected(id))
  811.     {
  812.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
  813.         return false
  814.     }
  815.    
  816.     WPN_AUTO_ON = 0;
  817.     return true
  818. }

User avatar
Luxurious
Mod Tester
Mod Tester
Egypt
Posts: 177
Joined: 6 years ago
Location: Egypt
Contact:

#12

Post by Luxurious » 5 years ago

hmm.. Did u know what i want ?!
Attachments
Capture.JPG
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#13

Post by Mark » 5 years ago

Have no clue what you want lol

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#14

Post by Raheem » 5 years ago

Please follow this: viewtopic.php?f=17&t=3437 if you like to add more custom weapons.

If you can't so post what you need and anyone can add it for you.
He who fails to plan is planning to fail

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 0 guests