[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Переход с Pawno на Lua. Часть 6
Дата: 24.06.2011, Пятница, 17:37:14 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 16
Репутация: 67+
Переход с 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
Репутация: 81+
Полезный урок.
  • Страница 1 из 1
  • 1
Поиск: