Приветствую форумчане. Я недавно начал осваивать скриптинг и в кач-ве своей первой задачи я решил сделать кастомное меню закупки для своего сервера.
Прошу вашей помощи в решении данной задачи.
Существует функция лимита покупки предметов. В данный момент предмет просто становится неактивным по истечению лимита, но как сделать отображение текущего кол-ва купленных предметов?
Собсна задча:
Представим, что текст ниже-пункты меню(предметы) и у предмета "Граната" существует лимит покупки в 3 шт:
1. Граната
2. Антидот
3. Доп. ХП
Каким образом можно сделать так:
1. Граната "(%s / %s)" g_ItemNowBuy, g_ItemMaxBuy"
2. Антидот
3. Доп. ХП
Или же когда игрок упирается в лимит покупки, то в пункте меню выдать:
1. Граната "(%s), g_ItemMaxBuy MAX"
2. Антидот
3. Доп. ХП
Ниже прикрепляю наглядный пример основных функций меню.
Прошу вашей помощи в решении данной задачи.
Существует функция лимита покупки предметов. В данный момент предмет просто становится неактивным по истечению лимита, но как сделать отображение текущего кол-ва купленных предметов?
Собсна задча:
Представим, что текст ниже-пункты меню(предметы) и у предмета "Граната" существует лимит покупки в 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;
}
Вложения
-
4.2 KB Просмотры: 4