Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для TrezeLurese
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.06.2014
    Адрес
    Russia
    Сообщений
    20
    Репутация:
    21 ±

    Как создать команду

    Приветствую всех. Сегодня мы подробно узнаем о процессе создания команды на МТА Lua. В этом нам поможет функция addCommandHandler.

    И так. Давайте разберём, какие же аргументы присутствуют в данной функции?
    Вот так выглядит функция для стороны сервера.
    PHP код:
    bool addCommandHandler(string commandName, function handlerFunction, [bool restricted falsebool caseSensitive true]) 
    - commandName - Комманда, вводимая в чат или консоль. Она пишется без символа "/". Например "showdialog". В чате её можно вызвать как "/showdialog", а в консоли просто "showdialog".
    - handlerFunction - функция, которая будет выпоняться при вводе данной команды
    Опционально можнно ввести следующие аргументы:
    - restricted - Доступность функции для какого-либо типа ACL. Например есть нужно добавить функцию для администратора, данный аргумент должен быть равен true, а в файле acl.xml название команды должно быть вписано в группу Admin. Можно конечно обойтись и проверкой на группу ACL (Подробнее тут), но это только для стороны сервера.
    - caseSensitive - Игнорирование регистра ввода команды. Например у вас стоит первый аргумент "showdialog", и если данный аргумент равен true, то вы можете ввестив чат\консоль команду "ShoWdIalOG", команда вс равно будет определена как "showdialog"

    На стороне клиента отсутствует третий аргумент.
    PHP код:
    bool addCommandHandler(string commandName, function handlerFunction, [bool caseSensitive true]) 
    Аргументы остаются те же.


    Вроде первый и 2 последних аргумента понятны, но что делать с функцией, как она используется, какие у неё аргументы?
    Даайте разберёмся с этим.
    Вот аргументы функции для стороны сервера:
    PHP код:
    player playerSourcestring commandName, [string arg1string arg2, ...] 
    - playerSource - Элемент, который вызывает команду, и для кого она выполняется. Лучше написать тут source.
    - commandName - Команда, которую должен вводить пользователь. Если использовать для одной команды, можно оставить "_", иначе ставить собственный аргумент, и делать проверку на команду.
    - arg1, arg2, ... - Аргументы команды. Например если нужно написать "/showdialog tetris", то "tetris" это arg1, но этих аргументов может быть множество.

    На стороне клиента отстутствует аргумент playerSource
    PHP код:
    string commandName, [string arg1string arg2, ...] 
    Но аргументы остаются те же.

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

    Начнём с пустой команды на стороне сервера
    PHP код:
    addCommandHandler("teletocenter", --Создадим команду "teletocenter"котоорая телепортирует игрока в центр карты.
        function(
    source) --Мы можем не задавать второй и следующие аргументытак как обязательный CommandName установлен по стандартуCommandName в данном случае равна "teletocenter"
            
    setElementPosition(source000) -- Так как source установлен в аргументето при вводе команды "teletocenter"вас перенесёт в центр карты.
        
    endfalsefalse) --Функция закончилась словом "end"следовательно можно продолжать необязательными аргументамиВ данном случае не получится ввести "teLeTOCenter"так как четвёртый аргумент отрицает выполнение данного действия
    Создадим такую-же команду, так-же на сервере, только уже более красивей выглядящую
    PHP код:
    function setPosition(source) --Создадим функцию setPositionгде первый аргумент будет пользователь,
        
    setElementPosition(source000) --И которая будет устанавливать нулевые позиции любомукто вызовет эту команду
    end
    addCommandHandler
    ("teletocenter"setPositionfalsefalse) --Тоже самоетолько второй аргумент функции addCommandHandler мы вынесли в полноценную функцию 
    Мы можем в данном случае записать как
    PHP код:
    addCommandHandler("teletocenter"setPositionfalse) -- убрав 4й аргумент
    --Или
    addCommandHandler
    ("teletocenter"setPosition) -- убрав 3й и 4й аргументы
    --Или 
    addCommandHandler
    ("teletocenter"setPosition_false) -- убрав 3й аргумент 

    Теперь создадим функцию с аргументом на сервере.
    PHP код:
    addCommandHandler("printnum", --Создадим команду "printnum"которая будет писать в чат заданное в аргументе число
        
    function(__num) --Так как мы используем в команде дополнительное значениевторой аргумент обязательно напишемтак как он обозначает введённую командуа первый можем обозначить как "_"так как игрок в данной команде не будет использоваться
             
    if not num or not tonumber(numthen num 1 end --Проверимвведён ли аргументи можно ли его считать номеромЕсли аргумент не введён или он не номерто аргументу присваиваем значение единицы
            outputChatBox
    (num) --Отправляем в чат сообщение с номером
        end
    ) --Закрываем функциюно так как аргументы не обязательныможем их не писать 
    А теперь создадим функцию с проверкой на команду на стороне клиента
    PHP код:
    function commandRead(cmd) --Создаём функцию на проверку командытак как на клиентепервый аргумент не элемента команда
        
    if cmd == "command" then print("Command")  --Если введёная команда равна "command"то принтим "Command"
        
    elseif cmd == "cmd" then print("cmd, not command"end -- А если команда равна "cmd" то принтим "cmd, not command"
    end --Закрываем функцию

    addCommandHandler
    ("command"commandRead) --Добавляем команду "command"и при её выполнении будет отправлено "Command"так как проверяется в функции аргумент команды
    addCommandHandler
    ("cmd"commandRead) --Таже самая функцияно будет отправлено "cmd, not command"так как такая-же проверкано аргумент команды будет другой
    addCommandHandler
    ("texter"commandRead)  -- Ничего не произойдёттак как в функции нет проверки на данную команду
    Думаю на этом урок закончить. Удачи в разработках, и спасибо за внимание.
    Последний раз редактировалось TrezeLurese; 31.08.2014 в 13:26.

  2. 3 пользователя(ей) сказали cпасибо:
    Desulaid (20.10.2015) MR_BEN (31.08.2014) [ForD] (22.11.2014)
  3. #2
    Аватар для Disinterpreter
    Проверенный

    Статус
    Оффлайн
    Регистрация
    02.01.2014
    Сообщений
    88
    Репутация:
    91 ±
    Еще екземпл
    Exmpl:
    PHP код:
    addCommandHandler"tpxyz"
        function( 
    pPlayersCmdxy)
            
    setElementPositionpPlayertonumber(x), tonumber(y), tonumber(z) )
        
    end

    Последний раз редактировалось Disinterpreter; 31.08.2014 в 13:30.

  4. #3
    Аватар для TrezeLurese
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.06.2014
    Адрес
    Russia
    Сообщений
    20
    Репутация:
    21 ±
    Отредактировал, привёл в более лучший вид, исправил некоторые ошибки

 

 

Информация о теме

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •