Изменение строки в статично созданном меню. CS 1.6, zp 4.3

Сообщения
38
Реакции
0
Помог
1 раз(а)
Приветствую форумчане. Я недавно начал осваивать скриптинг и в кач-ве своей первой задачи я решил сделать кастомное меню закупки для своего сервера.
Прошу вашей помощи в решении данной задачи.
Существует функция лимита покупки предметов. В данный момент предмет просто становится неактивным по истечению лимита, но как сделать отображение текущего кол-ва купленных предметов?
Собсна задча:
Представим, что текст ниже-пункты меню(предметы) и у предмета "Граната" существует лимит покупки в 3 шт:
1. Граната
2. Антидот
3. Доп. ХП

Каким образом можно сделать так:
1. Граната "(%s / %s)" g_ItemNowBuy, g_ItemMaxBuy"
2. Антидот
3. Доп. ХП

Или же когда игрок упирается в лимит покупки, то в пункте меню выдать:
1. Граната "(%s), g_ItemMaxBuy MAX"
2. Антидот
3. Доп. ХП

Ниже прикрепляю наглядный пример основных функций меню.

Код:
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <zombieplague>

new const INI_FILE[] =  "item_menu.ini"


new g_ZMItemName[30][128], g_ZMItemTodo[30][128], Float:g_ZMItemCost[30], bool:g_ZMItemCategory, g_ZMItemCounter, ZMItemCost[30][10]
new g_ZMItemNowBuy[30][10], Float:g_ZMItemMaxBuy[30], ZMItemMaxBuy[30][10]

new g_WeaponCallBack

new  g_ZMItemMenu

new  ZMIMessage[128]

//native zpnm_get_user_assasin
//native zpnm_get_user_sniper

public plugin_init()
{
    register_plugin("[ZP]Easy Weapon Menu", "1.0", "Sugarv")
    
    register_event("HLTV", "RoundStart", "a", "1=0", "2=0")

    //Main Menu create and additem
    g_MainMenu = menu_create("Меню покупки", "main_handler")
    
    //Create Sub menu

    g_ZMItemMenu = menu_create("Зомби предметы", "ZMItem_handler")
    
    //Make callback function
    g_WeaponCallBack = menu_makecallback("WeaponsCallBackFunc")
    
    //Add item in Sub menu
    
    for(new iZMI = 0; iZMI < g_ZMItemCounter; iZMI++)
    {
        formatex(ZMIMessage, 127, "%s \y%d$ ", g_ZMItemName[iZMI], floatround(g_ZMItemCost[iZMI]))
        
        menu_additem(g_ZMItemMenu, ZMIMessage, _, _, g_WeaponCallBack)
    }   
    
    register_clcmd("pmenu", "clcmd_pmenu")
}

public RoundStart(id, item)
{
    for(new id=0; id <= get_maxplayers(); id++) // Цикл, который чистит лимит у всех игроков
    arrayset(g_ZMItemNowBuy[0][0], 0, sizeof(g_ZMItemNowBuy) * sizeof(g_ZMItemNowBuy[]));
    
}

public plugin_precache()
{
    new cfgdir[32], filepath[100], linedata[1024]
    get_configsdir(cfgdir, charsmax(cfgdir))
    
    formatex(filepath, charsmax(filepath), "%s/%s", cfgdir, INI_FILE)

    if (file_exists(filepath))
    {
        new file = fopen(filepath,"rt")
        
        while (!feof(file))
        {
            fgets(file, linedata, charsmax(linedata))
            
            replace(linedata, charsmax(linedata), "^n", "")   
                
            if( equali(linedata, "[ZMItem ON]" ))
                g_ZMItemCategory = true
            
            if( equali(linedata, "[ZMItem OFF]"))
                g_ZMItemCategory = false   
            
            
            if(g_ZMItemCategory && (linedata[0] == '"'))
            {
                parse(linedata, g_ZMItemName[g_ZMItemCounter], 127, g_ZMItemTodo[g_ZMItemCounter], 127, ZMItemCost[g_ZMItemCounter], 9, ZMItemMaxBuy[g_ZMItemCounter], 9)
                
                g_ZMItemCost[g_ZMItemCounter] = floatstr(ZMItemCost[g_ZMItemCounter])
                
                g_ZMItemMaxBuy[g_ZMItemCounter] = floatstr(ZMItemMaxBuy[g_ZMItemCounter])
                
                g_ZMItemCounter++
            }
        }
    }
}

public zp_user_infected_post(id)
{
    /*Close Menu*/
    show_menu(id, 0, "^n", 1)
}
// && !zp_has_round_started()
public clcmd_pmenu(id)
{
    if(is_user_alive(id) && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id) && !zpnm_get_user_sniper(id) && !zpnm_get_user_assassin(id))
        menu_display(id, g_MainMenu, 0)
    else if(is_user_alive(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id) && !zpnm_get_user_sniper(id) && !zpnm_get_user_assassin(id))       
        menu_display(id, g_ZMItemMenu, 0)
}

public main_handler(id, menu, item)
{
    switch(item)
    {
        case 0:
        {
            menu_display(id, g_ZMItemMenu, 0)
        }
    }
}


public ZMItem_handler(id, menu, item)
{
    if((g_ZMItemTodo[item][0] == 'w') && (g_ZMItemTodo[item][1] == 'e') && (g_ZMItemTodo[item][2] == 'a'))
    {
        give_item(id, g_ZMItemTodo[item])
        zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - floatround(g_ZMItemCost[item]))
    }
    else if (g_ZMItemNowBuy[id][item] < g_ZMItemMaxBuy[item])
    {   
        g_ZMItemNowBuy[id][item]++
        zp_force_buy_extra_item(id, zp_get_extra_item_id(g_ZMItemTodo[item]), true)
        zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - floatround(g_ZMItemCost[item]))
    }   
    else
    {
        client_print(id, print_center, "Вы купили максимальное количество этого предмета за раунд.")
    }

}

public WeaponsCallBackFunc(id, menu, item) 
{
    
    if(menu == g_ZMItemMenu)
    {
        if(zp_get_user_ammo_packs(id) < g_ZMItemCost[item] || g_ZMItemNowBuy[id][item] >= g_ZMItemMaxBuy[item])
        //formatex(ZMIMessage, 127, "%s \y%d$ \r(MAX BUY %d)", g_ZMItemName[item], floatround(g_ZMItemCost[item]), floatround(g_ZMItemMaxBuy[item]))
        // menu_additem(g_ZMItemMenu, ZMIMessage, _, _, g_WeaponCallBack)
        return ITEM_DISABLED;
    }   
    
    return ITEM_ENABLED;
}
 

Вложения

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу