[ZP] Как сделать поднятие предмета по флагу?
Как сделать поднятие предмета по флагу?

Всем привет, частенько вижу, что ребята спрашивают - как можно запретить поднимать предмет или какое либо оружие без определенного флага. Или же как запретить человеку поднимать оружие если у него нет привилегии.Расскажу вам про самый как по мне простой способ блокировки

1. Для начало впишем все необходимые нам инклуды:
#include amxmodx
#include hamsandwich
#include zombieplague
#include fakemeta_util

2. Создадим макросы с w_ моделью нашего предмета и флага доступа:
#define FLAGACCESS               ADMIN_BAN                     // Флаг, с которым игрок сможет поднять предмет.
#define WEAPONMODEL_W        "models/anime/hentai.mdl"    // W_ модель предмета, на который ставим ограничение. Это может быть что угодно (Пушка, сундук, ящик, подарок и так далее)

3.Далее нам нужно зарегистрировать момент поднятия предмета с земли:
Дописываем в public plugin_init:
register_plugin("HentaiOneLoveForever", "1.0", "Mireille (Universe)");
RegisterHam(Ham_Touch, "weaponbox", "Ham_PlayerTouch");

4.Теперь перейдем к самой функции:
public Ham_PlayerTouch(iItem, iPlayer)
{
     if(!pev_valid(iItem) || !is_user_alive(iPlayer) || zp_get_user_zombie(iPlayer))
          return HAM_IGNORED;

     new szModelName[32];
     pev(iItem, pev_model, szModelName, charsmax(szModelName));

     if(equal(szModelName, WEAPONMODEL_W))
     {
          if(!(get_user_flags(iPlayer) & FLAGACCESS))
          {
               static Float:flLastTouch[33]; 
               new Float:flGameTime = get_gametime(); 

               if(flLastTouch[iPlayer] < flGameTime) 
               { 
                      flLastTouch[iPlayer] = flGameTime + 3.0; 
                      client_print(iPlayer, print_chat, "Чтобы взять данный предмет, нужны определенные права!");

                      return HAM_SUPERCEDE;
               }
          }
     }

     return HAM_IGNORED;
}


Все готово. Если что не получилось, вот готовый пример, сделанный мной:

У вас нет доступа к скачиванию файлов с нашего сервера

Привет, наша адмнистрация публикует только пушечный контент, поставь лайк под постом ниже и напишите самый топовый комментарий, мы готовим материал только для тебя, любимый Гость.

Пожертвовать Вы можете сделать автору Universe, подарок в виде пожертвования на его электронную копилку ;)


Комментариев 13
  1. Mort3m
    Mort3m
    • 0
    я конечно в павне 0, но сообщение в чате по идее будет флудить
    т.к событие срабатывает не 1 раз уж точно
    более того, есть и другие способы блокировки ( отдельный pev_, или по виапонкею ) 
    • 28 марта 2019 18:58
  2. Universe
    Цитата: Mort3m
    я конечно в павне 0, но сообщение в чате по идее будет флудить
    т.к событие срабатывает не 1 раз уж точно
    более того, есть и другие способы блокировки ( отдельный pev_, или по виапонкею ) 

    Внатуре, не подумал о флуде, сейчас уберу его. А насчет других способов, показал самым простым
    Why i'm not from Ukraine?
    -------------------------------------------------------------------------------------------------------------------------
    Группа VK: vk.com/forumbz
    • 28 марта 2019 18:59
  3. Mark
    Mark
    • 0
    Можно поставить блокировку сообщения, чтобы показывалось 1 раз в 5 сек, дабы избежать флуд.
    Метод хорош и прост.
    • 28 марта 2019 19:11
  4. 1337
    1337
    • -1
    Можно еще такой вариант использовать, флуда в чате не будет и ошибок никаких не вызывает.

    #define ACCESS_TOUCH ADMIN_ADMIN
    #define W_MODEL "models/w_.mdl"

    new Float:fLastTouch[33];

    public plugin_init( ) {
    ...
    register_touch("weaponbox", "player", "fw_Touch");
    }

    public fw_Touch(ent, id)
    {
    if (!pev_valid(ent) || !is_user_alive(id) || zp_get_user_zombie(id))
    return PLUGIN_CONTINUE;

    new model[32];
    pev(ent, pev_model, model, charsmax(model));

    if(equal(model, W_MODEL))
    {
    if(get_user_flags(id) & ACCESS_TOUCH)
    {
    new Float:fTime = get_gametime();

    if (fLastTouch[id] < fTime)
    {
    fLastTouch[id] = fTime + 1.5;
    ChatColor(id, "Низя")
    }

    return PLUGIN_HANDLED;
    }
    }

    return PLUGIN_CONTINUE;
    }
    • 28 марта 2019 20:30
    1. Mort3m
      Mort3m
      • 0
      а разница?
      тем более что reigster_touch это функция engine ( намек на то, что ты инклуд забыл дописать нужный )
      ничего не имею против engine, но сейчас многие скриптеры на фреше
      • 28 марта 2019 22:58
    2. xUnicorn
      Абсолютно тоже самое,только не Ham_Touch а register_touch. Код 1 в 1 вообще
      • 28 марта 2019 23:17
  5. xUnicorn
    Интересна, аткуда взял этат код?
    • 28 марта 2019 22:35
    1. Mort3m
      Mort3m
      • 0
      я увирен ни от тибя патаму што ти не скриптор!!!
      • 28 марта 2019 22:52
      1. xUnicorn
        Как сказал бог всего павна (и мира), Валасенка, я ноунейм
        • 28 марта 2019 23:16
  6. Dezses
    Dezses
    • 0
    Хорошая статья, пригодится
    • 21 апреля 2019 14:34
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Сайт был обновлен, нажми CTRL+F5
Основа для вашей сборки
ReHLDS 3.7.0.698

ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.

AmxModx 5.2.7.1

AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn

Reunion 0.1.92

Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.

Revoice 0.1.0.34

Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.

Metamod-r 1.3.128

Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.

Ultimate Unprecacher 1.1

Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!

ReAuthCheck 0.1.6

ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!

NetBufExtender (NBEX) 1.0

NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".

UserInfoNetOptimizer (UINO) 1.0

UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".

Информация

Добро пожаловать на WIZARD-CS.RU!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт