Народ! Сейчас я покажу вам небольшой функционал Lua в сравнении с Pawn. Начнем!
Вначале, я скажу пару слов о Lua:
Lua — интерпретируемый язык программирования. Является свободным языком, с открытыми исходными текстами на языке Си. Что это значит? Это значит, что официального компилятора, как для P-кода, тут нет. Код можно писать в такой программе как блокнот либо Notepad++(советую) или непосредственно в самой МТА.
Начну я с переменных. Все значения в Lua могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.
Основные типы:
• nil (неопределенный)
• boolean (логический)
• number (числовой)
• string (строковый)
• function (функция)
• userdata (пользовательские данные)
• thread (поток)
• table (таблица)
В нашем первой ознакомительном уроке, я не буду касаться каждого типа. Мы рассмотрим 2,3,4 и 5 типы данных.
Пару слов о переменных:
Переменные в Lua (так же как и в pawn) бывают числовые, логические и строковые. Они делятся на 2 группы: Локальные и глобальные. Локальная переменная - это переменная внутри функции, которая будет использоваться только в ней. И глобальная - это переменная для всех функций.
Примеры переменных Pawn:
//Глобальные переменные new a;//Простая переменная new a[100];//Строковая переменная new a = 10;//Числовая переменная new bool:a;//Логическая переменная //Локальные переменные main { new bool:a; }
Думаю в этом примере все понятно. Сначала переменные глобальные, а потом одна локальная. Это был пример из Pawn.
Примеры переменных Lua:
//Глобальные a = nil//Пустой тип переменной a = 10//Значение переменной равно 10 a = 2.56//Числовое значение Float a = 'String'//Строка a = "String"//Строка a = true//Логический тип //Локальная function Give(thePlayer) local id end
Если сравнивать Lua и Pawn, то тут явно выигрывает Lua, так как она легче. Примеры с переменными я вам показал, теперь перейдём к функциям.
В Pawn, функция обозначается stock'ом или public'ом. В Lua же это function.
stock mes() { new x = 10,y = 8, z = x+y,result; if(z >= x*y) { printf("%d",z); } else { result = z -7; printf("%d",result); } } public OnPlayerConnect(playerid) { stock mes() return 1; }
Это был код на Pawn думаю тут все понятно. Функция mes выведется при коннекте игрока. Элементарная арифметика. А теперь, напишем точно такой же код, но на Lua:
function joinHandler() local x = 10 local y = 8 local z = x+y local result = nil if(z >= x*y)then print(y) else result = z -7 print(result) end end addEventHandler("onPlayerJoin", getRootElement(), joinHandler)//Это значит, что данная функция onPlayerJoin будет при коннекте
Как мы видим, код в Lua более интересный, но код в Pawn удобный в читаемости. Кому как удобнее.
И последнее что мы разберём в Lua - это команды. Написание команд очень простое, главное просто знать константы функций, которые можно посмотреть тут и тут.
Итак, теперь сама команда. Возьмем команду создания оружки для игрока:
function GivePlayerWeapon(thePlayer,command,id,ammo)--Это название и константы функции. Название произвольное, а нативы такие: thePlayer = playerid(функция для игрока, command = это значит, что это команда, id = Это id оружия, ammo = количество патронов local id,ammo = giveWeapon(thePlayer,tonumber(id),tonumber(ammo))--объявим 2 переменные оружки и патронов и приравняем их к функции дать оружие, при этом,tonumber - это порядок ввода переменных. То есть thePlayer это функция для игрока, её мы не обозначаем как числовое значение. А к переменной id оружия присвоим первое значение tonumber. Значит когда игрок введет команду и введет ид оружия, сработает tonumbers и обозначит, что оружие обозначается первым. Тоже самое и с патронами, но они обозначены вторыми в списке, значит и вводить паторны нужна после ида оружия :D if(id == false) then--Ставим условие на то, что если игрок ввел не правильный id оружия outputChatBox("Неправильный синтаксис функции. Вы неправильно обозначили id оружия",thePlayer)--Отправим сообщение игроку end--объявим конец условию if(ammo == false) then//Поставим условие на то, если игрок ввел не правильное количество патронов outputChatBox("Неправильный синтаксис функции.Вы неправильно обозначили количество патронов",thePlayer)--Отправим сообщение игроку end--объявим конец условию end--Объявляем конец всей функции.
И теперь обозначим эту функцию командой:
addCommandHandler("weap", GivePlayerWeapon)--В любое место кода
Все! Теперь синтаксис этой команды: /weap [id] [ammo].
Если писать эту же команду на Pawn, то там бы вышло в 2 раза больше строк(учитывай что здесь в MTA стоит начальный командный процессор, а в Pawb это strtok)
Вот и весь урок на сегодня.
Автор урока: ex.Jord
Теги: Скриптинг,Lua,MTA