PrettySweetie | Дата: Пятница, 27.05.2011, 15:39 | Сообщение # 1 |
Местный
Группа:
Продвинутые
Сообщений: 704
Награды: 19
Город: Нериак
Репутация: 1221
Замечания: 0%
Статус:
| Переход с 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
|
|
|
|
s3ap | Дата: Пятница, 27.05.2011, 19:40 | Сообщение # 2 |
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус:
| Потому что команды парсятся по пробелу (/commandt arg1 arg2 arg3 arg4 arg5 arg6), а ... берёт все аргументы оставшиеся, и через concat они объединяются
|
|
|
|
AirKite | Дата: Пятница, 08.07.2011, 01:08 | Сообщение # 3 |
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
| Quote (Wolf_War) Code function killThisPlayer ( playerSource ) setElementHealth ( playerSource, 0 ) end addCommandHandler ( "kill", killThisPlayer )
Лучше вот так:
Code addCommandHandler ( "kill", function( playerSource ) setElementHealth ( playerSource, 0 ) end )
[1337GAMES] Easy RP (SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)
Jabber: airkite@qip.ru [Addon] QuickBinder [FS] Online Players Record
|
|
|
|
Turin_Brakes | Дата: Понедельник, 11.07.2011, 21:08 | Сообщение # 4 |
Местный
Группа:
Продвинутые
Сообщений: 632
Награды: 10
Город: Moscow
Репутация: 205
Замечания: 80%
Статус:
| Quote (AirKite) Лучше вот так: Code addCommandHandler ( "kill", function( playerSource ) setElementHealth ( playerSource, 0 ) end ) Лучше вот так:
Code addCommandHandler ( "kill", killPlayer )
I think SAMP is a pretty cool guy. He bans continents and doesn't afraid of anything.
[cut noguest]Помощь по cкриптам для MTA-SA. Оплату через вебмани не принимаю.[/cut]
Сообщение отредактировал Turin_Brakes - Понедельник, 11.07.2011, 21:11 |
|
|
|