Дорогие друзья, многие переходят с pawn на lua(кроме куя конечно). Поэтому я решил сделать небольшое предисловие
Вначале, я скажу пару слов о Lua:
Lua — интерпретируемый язык программирования. Является свободным языком, с открытыми исходными текстами на языке Си. Что это значит? Это значит, что официального компилятора, как для P-кода, тут нет. Код можно писать в такой программе как блокнот либо Notepad++(советую) или непосредственно в самой МТА.
Начну я с переменных. Все значения в Lua могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.
PHP код:
Основные типы:
nil (неопределенный)
boolean (логический)
number (числовой)
string (строковый)
function (функция)
userdata (пользовательские данные)
thread (поток)
table (таблица)
В нашем первой ознакомительном уроке, я не буду касаться каждого типа. Мы рассмотрим 1,2,3,4 и 5 типы данных.
Пару слов о переменных:
Переменные в Lua(так же как и в pawn) бывают числовые, логические и строковые. Они делятся на 2 группы: Локальные и глобальные. Локальная переменная - это переменная внутри функции, которая будет использоваться только в ней. И глобальная - это переменная для всех функций.
Примеры:
PHP код:
//Глобальные переменные
new a;//Простая переменная
new a[100];//Строковая переменная
new a = 10;//Числовая переменная
new bool:a;//Логическая переменная
//Локальные переменные
main
{
new bool:a;
}
Думаю в этом примере все понятно. Сначала переменные глобальные, а потом одна локальная. Это был пример из P-кода.
Примеры переменных Lua
PHP код:
//Глобальные
a = nil//Пустой тип переменной
a = 10//Значение переменной равно 10
a = 2.56//Числовое значение Float
a = 'String'//Строка
a = "String"//Строка
a = true//Логический тип
//Локальная
function Give(thePlayer)
local id
end
Если сравнивать Lua и P-код, то тут явно выигрывает Lua, так как она легче. Примеры с переменными я вам показал, теперь перейдём к функциям.
В P-коде, функция обозначается stock'ом или public'ом. В Lua же это function. Все довольно легко:
PHP код:
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);
}
}
OnPlayerConnect(playerid)
{
stock mes()
}
Думаю тут все понятно. Функция мес выведется при коннкте игрока. Элементарная арифметика. А теперь, напишем точно такой же код, но на Lua:
PHP код:
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 код более интересный, но P-код удобный в читаемости. Кому как удобнее.
И последнее что мы разберём в Lua - это команды. Написание команд очень простое, главное просто знать константы функций, которые можно посмотреть тут и тут.
Итак, теперь сама команда. Возьмем команду создания оружки для игрока:
PHP код:
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.
Если писать эту же команду на P-коде, то там бы вышло в 2 раза больше строк(учитывай что здесь в мта стоит начальный командный процессор, а в P-коде это стрток. НЕ КАСАЮСЬ ZCMD и SSCANF)
Вот и весь урок на сегодня. Будем продолжать.
Авторские права:
Урок by ARHI[V]IRUS
Отдельное спасибо CoolDark