В данной статье я расскажу вам парочку способов, как можно сделать проверку на уровень для [Оружия или для зомби класса]
Зомби-Класс:Вы должны добавить встроенную функцию для zombie_plague40, а именно zp_user_infected_pre(id)
zp_user_infected_pre(id) - Функция, возникающая перед тем, как id становится Зомби.
public zp_user_infected_pre(id)
{
if (zp_get_user_next_class(id) == g_zclass)
{
if(zp_level(id) < X)
{
zp_set_user_zombie_class(id, g_zclass_classic)
client_print(id, print_chat, "Вы не достигли X уровня!")
}
else
zp_set_user_zombie_class(id, g_zclass)
}
}
zp_get_user_next_class(id) - Функция, возвращающая значение, а именно, тот класс, который выбрал id в меню выбора классов зомби.
zp_set_user_zombie_class(id, g_zclass_classic) - Функция, которая насильно устанавливает, каким зомби-классом будет id перед заражением.
zp_level(id) - Функция, которая возвращает уровень id
g_zclass - Переменная, которая хранит тот класс, который мы хотим сделать за достижение определенного уровня
g_zclass_classic - Переменная, которая хранит тот класс, который мы будем заменять, если id не достиг определенного уровня + выводим сообщение
X - Очевидно, тот уровень, который мы хотим установить для данного класса
Если вы хотите, сделать несколько ограничений, то добавляйте их ниже в функции zp_user_infected_pre(id) перечисляя оператором else if.
public zp_user_infected_pre(id)
{
if (zp_get_user_next_class(id) == g_zclass_fast)
{
if(zp_level(id) < 3)
{
zp_set_user_zombie_class(id, g_zclass_classic)
client_print(id, print_chat, "Вы не достигли 3 уровня!")
}
else
zp_set_user_zombie_class(id, g_zclass_fast)
}
else if (zp_get_user_next_class(id) == g_zclass_heavy)
{
if(zp_level(id) < 5)
{
zp_set_user_zombie_class(id, g_zclass_classic)
client_print(id, print_chat, "Вы не достигли 5 уровня!")
}
else
zp_set_user_zombie_class(id, g_zclass_heavy)
}
}
Оружие:Здесь есть 2 способа. Один прямой, другой косвенный.
Прямой способ - перед выдачей. То есть сделать проверку, непосредственно в самой менюшке.
ps. Оружие нельзя выбрать/получить, если вы не достигли определенного уровня. Но само оружие не привязано к уровню.
Второй способ, более проверенный, и универсальный - косвенный. Устанавливается в самом плагине оружия, к которому вы хотите привязать уровень.
Для zombie_plague40:
Если мы хотим, чтобы в Extra-Items ( Магазин оружия ) была привязка по уровню, и какие то оружия мы могли покупать, только по достижению какого либо уровня, то нам необходимо изменить код:
Ищем в исходнике оружия функцию zp_extra_item_selected(id, itemid).
zp_extra_item_selected(id, itemid) - Функция, которая вызывается тогда, когда мы выбираем в меню Extra-Items какое либо оружие. В самом моде, проверяется соответствие цены и Аммо id, ну а мы сделаем привязку по уровню
public zp_extra_item_selected(id, itemid)
{
if(itemid == g_itemid)
{
if(zp_level(id) >= X)
give_itemid(id)
else
{
client_print(id, print_chat, "Вы не достигли X уровня!")
return ZP_PLUGIN_HANDLED;
}
}
return PLUGIN_HANDLED;
}
g_itemid - Переменная, которая хранит оружие
give_itemid(id) - Функция, которая вызывает native для выдачи оружия.
Для других модов ( сложнее )
Перед выдачей в нативе, можно так же поставить проверку на уровень
public native_give_itemid(id)
{
if(zp_level(id) >= X)
give_itemid(id)
else
{
client_print(id, print_chat, "Вы не достигли X уровня!")
return PLUGIN_HANDLED;
}
}
Так же, не забывайте, что в вашей lvl-системе может быть другой native-функция возвращающая уровень игрока. В наших примерах, это была zp_level(id).
ВАЖНО! В каждом плагине, в котороом вы делаете привязку по уровню, в начале должны прописать native функции уровня.
native zp_level(id)
Ну, или если вы используете мою lvl-систему, то инклуд
#include