Дата: 24.06.2011, Пятница, 17:37:14 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 16
Переход с Pawno на Lua. Часть 6 — Создание команд.
Если мне не изменяет память, то для создания команды в сампе, ее код необходимо вставлять в паблик OnPlayerCommandText Вот пример: Code if(strcmp(cmdtext,"/kill",true) == 0) { SetPlayerHealth(playerid,0.0); return 1; } А вот, какой код для этого же надо сделать в мта: Code function killThisPlayer ( playerSource ) setElementHealth ( playerSource, 0 ) end
addCommandHandler ( "kill", killThisPlayer )
Давайте разберем этот код. В первой строчке объявляется функция. playerSource – это игрок, который ввел команду. Во второй строчке здоровье этого игрока устанавливается на 0. В третей строчке функция закрывается. А вот последняя строка самая интересная. Здесь объявляется, что при вводе комманды /kill, вызывается паблик killThisPlayer. Действительно лучше непонятного метода павна?
addCommandHandler – это функция, которую можно использовать и на стороне сервера и на стороне клиента.
Вот ее синтаксис: Code addCommandHandler ( string commandName, function handlerFunction, [bool restricted = false, bool caseSensitive = true] )
Необходимые аргументы: string commandName – сама команда function handlerFunction – функция, которая будет вызываться при вводе команды.
Необязательные аргументы: bool restricted = false – я это плохо понял. Вроде бы, если установить на true, то этой командой смогут пользоваться только те группы, которым это разрешено в ACL. По умолчанию false, в клиентской части не используется. bool caseSensitive = true – чувствительно ли к РеГиСТру.
А вот аргументы получаемой на выходе функции: Code player playerSource, string commandName, [string arg1, string arg2, ...] player playerSource – игрок, который ввел команду. В клиентской части не используется. string commandName – сама команда. string arg1, string arg2, ... – аргументы, которые игрок вводил в команде (ну например в команде /give 11 56 arg1 — это 11, а arg2 – это 56).
Примеры команд: Code function consoleCreateMarker ( playerSource ) local x, y, z = getElementPosition ( playerSource ) createMarker ( x, y, z, "checkpoint", 2, 255, 0, 0, 255 ) outputChatBox ( "Вы создали красный маркер", playerSource ) end
addCommandHandler ( "createmarker", consoleCreateMarker ) В первой строке объявляем функцию команды. Во второй строке получаем позицию игрока и записываем в переменные x,y,z. В третей строке создаем маркер на позиции игрока. В четвертой строке пишем игроку сообщение. В пятой закрываем функцию. В последней строке объявляем, что функция consoleCreateMarker будет вызываться командой createmarker.
Code function sendMeText ( commandName, text ) outputChatBox ( text ) end addCommandHandler ( "text", sendMeText ) В первой строке объявляем функцию команды. Во второй строке посылаем игроку то, что написали. В третей строке закрываем функцию. В последней строке объявляем, что функция sendMeText будет вызываться командой text.
Подумайте: Первый и второй пример — это клиентские или серверные скрипты?
Внимание: По последнему примеру. Он не подойдет для создания, например, локального чата, тк text – это лишь одно слово, которое вы введете. На форуме МТА мне, для создания локального чата (ну или чего либо другого с этим связанного), посоветовали использовать такую конструкцию: Code function LocalChat( player, cmd, ... ) local parametersTable = {...} local text = table.concat(parametersTable, " ") outputChatBox ( text ) end
P.S. Этот, и все остальные мои уроки написанны так, как я понимаю Lua и как мне удобно в нем работать
Дополнительно: addCommandHandler на вики MTA
|
Дата: 06.08.2011, Суббота, 13:47:23 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 163
Полезный урок.
|