Народ! Сейчас я покажу вам небольшой функционал 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