05:04
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, PrettySweetie  
Переход с Pawn на Lua. Часть 6
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
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua