Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 14
    Гостей: 5
    Пользователи: - отсутствуют
    Роботы: Yahoo Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 11-12-2011, 00:33 Просмотров: 6020

    cmd_access Функция проверяет есть ли у игрока права на использование конкретной команды

    В последнее время развелось какая то мания на плагины вип и попытки заработать на CS серверах и привилегиях, очевидно что вип привилегии нужно ограничить от всех кто не имеет на них право, как же это сделать? В большинстве случаев игроку присваивается какой то из не используемых админских фрагов. И фактически игроку которому дали какой то флаг кроме Z (USER) то он уже дамин, но не совсем пока что правами доступа.
    Что бы узнать конкретные права доступа игрока, можно воспользоваться сток функцией cmd_access

    Инфо из amxmisc.inc:
    stock cmd_access(id, level, cid, num, bool:accesssilent = false) 



    Синтаксис:
    cmd_access ( id, level, cid, num,bool:accesssilent = false )

    • id - Айди игрока
    • level - Проверяемый уровень ( Admin Level Constants )
    • cid - Индекс команды
    • num - Сколько у команды аргументов
    • bool:accesssilent = false - Выдавать лиигроку сообщение о недостаточных правах доступа или нет.


    Тип функции:
    Stock

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[amxmisc.inc] cmd_access"
    #define VERSION "1.0"
    #define AUTHOR "Admin"


    public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("test_cmd","f_test_cmd",ADMIN_LEVEL_A,"[arg]")
        register_clcmd("test_cmd_two","f_test_cmd_two",ADMIN_LEVEL_A,"[arg]")
    }
    public f_test_cmd(id,level,cid){
        
        if (!cmd_access(id,level,cid,2,true))
        {
            console_print(id, "You level is low to this command")
            return PLUGIN_HANDLED
        }
        console_print(id, "You secred code")
        
        return PLUGIN_HANDLED
    }
    public f_test_cmd_two(id,level,cid){
        
        if (!cmd_access(id,level,cid,2,false))
        {
            return PLUGIN_HANDLED
        }
        console_print(id, "You secred code two")
        
        return PLUGIN_HANDLED
    }


    Описание:
    В данном примере показано 2 варианта использования функции, с выводом стандартного сообщения о нехватке прав на команду и вывода своего сообщения об этом.

    Сама по себе функция только лишь проверяет наличие прав с заданными правами для команды, по этому с начала необходимо задать права при регистрации команды:
        register_clcmd("test_cmd","f_test_cmd",ADMIN_LEVEL_A,"[arg]")

    Регистрируется команда и назначается флаг доступа ADMIN_LEVEL_A, и назначается функция которая будет вызвана при выполнении пользователем данной команды f_test_cmd.

    В функции f_test_cmd принимаем айди игрока, уровень доступа, и айди команды.
    Далее наконец то начинается работа функции cmd_access, вернее идет условие в котором все зависит от результата работы функции cmd_access. Ей мы предоставляем айди игрока, его уровень, количество аргументов команды и ставим true что бы не выводилось стандартное сообщение о нехватке прав.
    Если количество аргументов буде меньше двух ( сама команда тоже является первым аргументом) то будет выдана ошибка и как пользоваться командой ( это дело так же пишется при регистрации команды)

    Вот результаты:
    Не достаточно прав (обратите внимание на сообщение, оно наше,а не стандартное):
    ] test_cmd
    You level is low to this command


    Не правильное количество аргументов
    ] test_cmd
    Usage:  test_cmd [arg]


    И права и аргументы в порядке
    ] test_cmd  123
    You secred code


    Так же не забывайте возвращать
    return PLUGIN_HANDLED

    Что бы в консоли не появлялось не приятное сообщение о неизвестной команде Unknown command.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    DeathGun

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Глупый вопрос, если позволите.
    Почему получается, что при команду нужно вводить на подобие "amx_sm 1", а при "amx_sm" мы получаем ошибку флагов?
    Возможно, я неправильно регистрирую команду?
    register_clcmd("amx_fuck", "doFuck", ADMIN_KICK)

    ...
    public doFuck(id, level, cid){
    if (!cmd_access(id, level, cid, 2, true)) {
    client_print(id, print_chat, "YOU'RE LOSER")
    return PLUGIN_HANDLED
    }
    else {
    client_print(id, print_chat, "YOU'RE FUCKIN COOL")
    }
    return PLUGIN_HANDLED


    В данном примере при "amx_fuck 1" получаю всё как нужно.
    При "amx_fuck" - нет. Подскажите, что не так?

    UPD. Нужно было сделать num 1

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама