Lua-скрипти: приклади, як встановити і запустити

Lua-скрипти: приклади, як встановити і запустити

Lua не є інтерпретованою мовою і генерує байт-код з іншої програми, наприклад, Java. Ця програма працює на віртуальній машині Lua VM. Більшість таких пристроїв називаються стеками, але Lua відрізняється тим, що вона заснована на регістрах і є однією з перших широко використовуваних VM в ігровій сфері.

Перевага регісторної архітектури полягає в тому, що вона дозволяє уникнути великої кількості копіюваних даних і зменшує обсяг інструкцій для функції. Lua VM має автоматичне керування пам 'яті і скидання непотрібної інформації, що забезпечує ідеальну конфігурацію для створення сценаріїв швидкого прототипування.


Коротко про Луа

Lua - це проста в освоєнні і швидка скриптова мова з синтаксисом типу pascal. Це дозволяє програмістам-початківцям писати свої власні програми. Він використовується в багатьох іграх і програмах для розширення існуючої функціональності та програмування послідовностей користувача. В інтернеті є багато навчальних програм, які допомагають працювати цією мовою, в тому числі багато інформації можна знайти на домашній сторінці Lua.

Ця мова програмування була створена в Бразилії в 1993 році програмістами Роберто Єрусальшимом, Луїсом Енріке де Фігеіредо і Вальдемаром Целесом в університеті Ріо-де-Жанейро, де як і раніше знаходиться офіс "LabLua". Назва походить від португальської, що в перекладі означає - місяць. Одним з попередників була мова SOL (Simple Object Language). Оскільки ім 'я Lua є існуючим, а не абревіатурою, воно не повинно писатися, як LUA, а саме як Lua.

Це гнучка мова, вона використовується на декількох напрямках:

  1. Вікіпедія застосовує Lua для сценаріїв шаблонів.
  2. Медіаплеєр VLC працює зі сценаріями Lua-скриптів для quik.
  3. Lua використовується в промислових програмах, таких як Adobe Lightroom.
  4. Програми для вбудованих систем, таких як проміжне ПЗ Ginga для цифрового телебачення.
  5. Ігри - мова є провідною для сценаріїв в іграх, наприклад, використовується при створенні World of Warcraft і Angry Birds.
  6. Кожному доступно спробувати застосування коду онлайн в Lua Demo з цікавим способом вивчення і використанням ігрового движку.

Функціонал цієї програми можна використовувати в LÖVE, Defold і, звичайно ж, в Pico-8.

Основи синтаксису

Lua використовує дуже спрощений синтаксис. Користувачеві не потрібно застосовувати точки з комами або великі пробіли, тому що ці знаки самі інтерпретуються програмою. Всі змінні скриптів Lua для quik типові. Тому завжди потрібно вказувати, коли локальні значення потрібні для поточної області і попередньо оголошувати їх. Фактично на практиці існує дуже мало випадків, коли насправді потрібні глобальні значення.

Можна визначити локальну змінну з ключовим словом local. При цьому значення її оголошувати не потрібно. Глобальні змінні означають контекст поточного сценарію і тому не є такими для кожного окремого скрипту в грі, які кожен працюють самостійно і автономно.


Змінні можуть містити будь-яку послідовність цифр, літер і підкреслень, але вони не повинні починатися з числа. Null представляє ключове слово, коли змінні не визначені. Неоголошені невідличні від оголошених змінних, які не мають значення. Приклади скриптів Lua:

Блоки коду і оператори if

Блоки визначаються певними ключовими словами, після чого слід "end". Умови в if операторах повинні супроводжуватися ключовиками "then". If заяви використовують "elseif", а не "else if". Можна створити нову порожню область з "do... end" блоком.

Lua використовує особливий тип даних, званий таблицею, призначений для цілей створення масивів, словників, хеш-карт, об 'єктів інших мов. Таблиці - це просто список пар "ключ-значення", якими може бути будь-який тип даних, навіть інші таблиці. Ви можете використовувати логічне значення як ключ. Оскільки Lua динамічно типізується, можна мати будь-яку суміш типів даних в обох ключах і значеннях за вибором користувача, з яких потрібно визначитися перед тим, як встановлювати Lua скрипти.

Значення таблиць можуть бути визначені як всередині, так і окремо. Зазвичай є два способи отримати і встановити їх значення, синтаксис "точка", наприклад, "myTable.a", і синтаксис дужки, наприклад, "myTable [" "a" "]". Якщо ви використовуєте рядкові ключі, ви можете використовувати лише синтаксис точок і застосовувати його, якщо рядок починається з числа.

Кожне значення в таблиці враховується, nil - якщо воно не встановлено. Це означає, що неможливо визначити, чи оголошено значення в таблиці або це просто нуль, якщо воно ніколи не було визначено раніше. Це означає, що якщо ключі в таблиці вказані і встановлені на нуль, це не матиме ніякого ефекту, вірніше, воно буде таким, яким було б у випадку, якщо б їх і не визначали зовсім. У Lua таблиці з числовими ключами починаються з індексу 1, а не 0. Це те, що викликає великий головний біль для програмістів. Ви можете розділити вбудовані елементи таблиці комою або крапкою з комою.

Складний тип даних

Таблиці вважаються складним типом даних в Lua - це означає, що змінні в них просто посилаються на один і той же об 'єкт в пам' яті, тому не можна безпосередньо порівнювати два значення і очікувати, що вони проведуть що-небудь. Проте рядки, числа, літери та інші примітивні типи даних можна порівнювати безпосередньо.

Цифри в Lua використовують тільки в одному вигляді - свого власного числа. Немає таких типів, як int, float, long, double та інших, як в інших мовах і це треба враховувати перед тим, як встановлювати Lua-скрипти. Технічно всі значення в Lua являють собою числа з плаваючою комою.


Lua має тільки "=" оператор для визначення і збільшення. У ньому немає "+ =", "- =", "+ +" або чого-небудь ще. Оператором конкатенації є "".... Можна застосовувати цю операцію на рядках і номерах без проблем. Однак не можна об 'єднувати інші типи даних - логічні або табличні. Можна отримати довжину таблиці або рядка з "#" оператором і це працює тільки для масивів з числовими індексами. Наприклад, код не працюватиме з таблицями, які мають рядкові індекси.

Циклічні типи Loops

Існує чотири типи циклів Loop, що в перекладі означає петля або виток.

While (проміжний) - це найпростіший вид циклу і функцій, як і слід було очікувати іншими мовами, і означає, що перевірка проводиться перед запуском внутрішнього блоку.

Numeric for loop (цифровий). Цикл застосовує змінну local для своєї області та збільшує або зменшує її. Користувач оголошує і визначає змінну, яку потрібно використовувати і за якою слід значення мети.

Generic for loop (генерований) - використовує функцію ітератора. Вона викликається повторенням кожного циклу і повертає значення, які будуть застосовані в ній.


Pairs (пари) є функцією ітератора в глобальному масштабі. Вона приймає таблицю як аргумент, повертає індекс і значення кожної змінної в таблиці. Код буде перебирати навіть ненульові індекси. У неї є "брат" - "ipairs", який робить точно те ж саме, за винятком того, що працює тільки з числовими індексами і зупиняється, коли досягається значення nil.

Repeat loop (повторення) схожий на while, за винятком того, що перевірка умов проводиться в кінці блоку, а не на початку. Перед тим як відкрити lua скрипт потрібно враховувати, що код всередині буде запускатися не менше одного разу. Цикл повторення зазвичай уникають у розробці цієї мови, оскільки його прецедент обмежений і важко читаємо через те, що не використовує стандартний do.. end синтаксис.

Метод функцій

Функції - це ще один складний тип даних, можна передавати як змінні, і також можна викликати їх, щоб виконати код всередині. Вони схожі на методи іншими мовами.

Існує два способи визначення функції в Lua. Перше оголошення є глобальним, оскільки не існує локального ключового слова. Як правило, глобальні функції вважаються прийнятними. Проте користувач все одно може зробити їх локальними, якщо потрібно, поставивши "local" фронт. Можна також оголосити змінні до того, як визначити функції, які все одно схожі на будь-який інший тип даних. Можна передати їх, призначити змінними або прийняти стільки аргументів, скільки потрібно, за допомогою синтаксису "".... Фактичним об 'єктом ""... є "tuple" (кортеж), тому потрібно оточити його фігурними дужками, щоб перетворити дані на таблицю.

Кортеж - це просто список імен, таких як параметри у функціях, які можуть повертати кілька значень, а їм, у свою чергу, можна присвоїти змінні. Якщо ви помістите функцію в таблицю, її можна викликати двома різними способами. Стандартний синтаксис точок або двокрапки надішле масив як перший аргумент.


Глобальний простір імен

"Луа" "надає кілька таблиць в глобальному просторі імен, які містять допоміжні функції, такі як" string "," table "і" math ". Таким чином, користувач ніколи не повинен вказувати будь-яку змінну з названих, оскільки вони будуть перерозподіляти масиви, що містять корисні функції.

Існують дві таблиці, які спільно використовуються всіма сценаріями на сервері або клієнті (але не для обох) - це "_G" і "shared". Перша - справді глобальна, реалізована через окремі скрипти, тому, якщо потрібно отримати або встановити значення з неї, використовують "_G.something".

"Strings" (Струни) - цією функцією Lua може кількома способами визначити рядковий літерал і багатострокові дані, використовуючи подвійні квадратні дужки. Також можна розмістити будь-яку кількість знаків рівності (=) між квадратними дужками ([= = = [...] ===]). Вони збалансовані, можуть включати в себе послідовності всередині, як]]. Lua також має власний набір вбудованих функцій маніпуляції рядками і власну, витіснену версію регулярних виразів, званих рядковими шаблонами.

Ігровий місячний сценарій

Це дуже прості перші кроки з написання програми, але вони є хорошими відправними точками для злому скриптів Garry Mod 10 Lua. Перший крок - створюють фактичний файл сценарію Lua. Відкривають текст або редактор - блокнот буде відмінно працювати для цієї мети. Далі зберігають цей файл, прописуючи, як на малюнку.

Де:


  • < Steamname > - ім "я паролів.
  • < Garry 's Mod Install location > - каталог Steam для Garry' s Mod.

Типове місце встановлення для скриптів Lua для garry s mod зазвичай "C:\ Program Files\Steam\steamapps\\garrysmod ", але може відрізнятися на комп 'ютері -" autorun\client ". Будь-які файли сценаріїв, розміщені у цій теці, будуть запускатися при запуску Lua на клієнті, наприклад, коли почнеться нова гра або користувач приєднується до сервера. Далі створюють файл типу Hello World, додаючи до нього сценарій lua mod скриптів. Це найпростіший варіант.

Це може здаватися трохи заплутаним відразу. Скрипт видає вміст таблиці (які масиви або списки викликаються) і перехоплює дані до команди консолі, щоб підтвердити, що потрібно визначити функцію, яка не приймає ніяких параметрів і не повертає значення, але обов 'язково встановлює "кінець" в кінці своїх команд.

Функції - це модульні фрагменти коду, які можна використовувати кілька разів. У цьому прикладі показано, як запустити скрипт Lua. Тут створено список рядків, але користувач також може вставляти й інші об 'єкти. Таблиці є асоціативними або хешованими. Це означає, що кожен елемент у списку може посилатися на ключ.

Ці команди друкують всі елементи в таблиці, а структура називається циклом. Звертають увагу на команду пари "myTable", яка запускається один раз для кожного елемента і повертає пари ключ/значення для значень у списку.

Значення - це елемент у таблиці, а ключ - це просто спосіб посилання на нього. Цей приклад показує, як виводити текстові та значення змінних з тією самою командою друку. Змінні "ключ" і "значення" встановлюються в циклі вище. Звертають увагу на ""... між рядками і змінними. Символ ""... - оператор конкатенації Lua. Це говорить мові, що потрібно склеїти два елементи разом і розглядати їх як один текстовий рядок ".concommand.Add":

  • my_test_function;

Запис створює консольну команду, яка запускає тільки що ініційовану функцію. Першим її параметром є назва команди управління, в цьому випадку: «my_test_function». Це те, що користувач вводить у консоль мод Garry для запуску скрипту.

Другий параметр - це функція для запуску, в цьому випадку: myTestFunction. Цей файл слід зберегти. Далі тестують скрипт, запускають Garry 's Mod і нову гру. Після цього відкривають консоль, використовуючи тильду (ауд). Якщо вона не з 'являється, тоді потрібно її включити, вводячи "my_test_function" до рядка в нижній частині панелі. Після запуску почнеться автоматичне заповнення екрана з назвою команди, натискають Enter, щоб її запустити.

Можливості Lua-Quick-Try-Out

Ця консоль призначена для прямого вводу коду Lua (наприклад, команда команди Lua (8 + 9) відразу виводить результат 17).

Її функції:

  1. Основне вікно для вихідного коду з функціями його збереження і завантаження.
  2. Зневаджувач сценарію з точками зупину, одноступеневе виконання та вигляд змінної.
  3. Функції для створення таблиць.
  4. Функції для створення діаграм.
  5. Функції для створення графічних зображень.
  6. Функції для створення векторних графіків.
  7. Онлайн-допомога для створення функцій Lua.

Точки консолі зупину можуть бути встановлені клацанням поряд з номером рядка. Якщо режим зневаджування увімкнено, вигляд змінної буде показано у правій частині головного вікна. Її розмір можна змінити, перетягуючи ліву межу. Різні параметри режиму зневадження "вкл" або "викл" зберігаються і відновлюються, коли його увімкнено або вимкнено. Можна застосовувати коліщатко миші для зміни видимого розміру діаграм та графіки. Праву кнопку миші можна використовувати для відкриття контекстного меню для діаграм з функціями їх масштабування.

SAMP Lua-скрипти - це бібліотека lua для MoonLoader, яка додає деякі команди, щоб спростити модифікацію SA: MP,SAMP. Events дає можливість обробляти SA: MP вхідні і вихідні низькорівневі мережеві пакети дуже простим способом. Можна переписати дані, встановивши всі аргументи в таблиці в правильному порядку або можна перервати обробку будь-яких пакетів, повернувши false, яка запобігає зміні користувачем позиції гравця. Перед тим як встановити Lua-скрипт samp, можна додати власний обробник пакетів.

Дистрибутив Lua-WoW

Так називається дистрибутив вихідного коду Lua, модифікований для відповідності середовищу аддонів World of Warcraft.

Його дані:

  1. Адміністратори: morlando.
  2. Користувачі: morlando.
  3. Ліцензія: MIT / X.
  4. Мова: c, lua 5.
  5. Мітки: перекладачі, засоби тестування.
  6. Операційні системи: macros, windows, os independent.

Ця версія мови налаштована на відповідність середовищу Lua World of Warcraft. Всі параметри сумісності 5.0-5.1 відключені, крім openlib. Бібліотека бітліба працює. Деякі wow Lua скрипти - специфічні, Lua-бібліотечні функції реалізовані.

Програмою надаються глобальні псевдоніми для функцій "Lua.string.format", вони можуть використовувати вибір аргументів з Lua 4.0. Двійкові файли Windows, включені до цього завантаження, статично пов 'язані для продуктивності. Вони можуть працювати не так, як очікувалося користувачем, при використанні з деякими сторонніми пакетами.

Історія версій:

  1. 12 додано скраб, tostringall, проект Visual Studio оновлено до Visual Studio 2008 Visual C++. Runtime тепер статично пов 'язана, що має усунути деякі проблеми, пов' язані з lua-wow при певних установках Windows.
  2. Lua скрипти v34 c - додано strrelpace (string.replace, wow.strreplace).
  3. 10.1 - додано msvcr80.dll до проекту windows.
  4. 10 - реорганізовані файли readme. Перейменовані проекти msvc і імена виходу exe. Проект msvc включає значок і ресурси Lua для виконуваних файлів.
  5. 9 - додано глобальні версії тригонометричних функцій. Програма правильно використовують градуси .strsplit, надрукує відповідне повідомлення про помилку, якщо воно переповнить стек, що тепер вже неможливо практично за допомогою strjoin.
  6. 8 - оновлена сумісність 5.0 openlib, оскільки WoW не використовує libs в будь-якому випадку.
  7. 7 - змінено GCPAUSE до 110 на WoW 2.1. Усунуто кілька різних попереджень компілятора.
  8. 6.1 додано # define LUA_LIB для lwowlib & lbitlib для виправлення проблем компіляції в Lua скриптах для самп.
  9. 6 - оновлено бітліб до останньої версії. Тепер він коректно використовує 32-бітні цілі числа, як WoW. Глобальні псевдоніми для функцій bitlib і table.setn були видалені, оскільки вони не існують в WoW.
  10. 5.1 - ігнорує знак порядку байтів UTF-8.
  11. 5 - додано debugstack, зроблено деякі невеликі оптимізації і спрощення коду.
  12. 4 - додано вибір аргументу в string.format.
  13. 3.1 виправлено проблему з Makefile.
  14. 3 - додано специфічні функції, глобальні псевдоніми, css Lua скрипти.
  15. 2 - цей пакет тепер можна використовувати як заміну для стандартного дистрибутива джерела Lua: проект MSVC, включаючи попередньо скомпільовані двійкові файли Windows, тепер знаходяться в підкаталозі msvc, інша структура каталогів не порушена.
  16. 1 - додано BitLib. Оптимізований розмір файлу Luac.exe. Включає тестові програми.

Ігровий рушій Pico-8

Pico-8 - це фантастична програма, яка емулює повну ігрову консоль з обмеженими 8-бітними специфікаціями. Вона має всі необхідні інструменти для програмування мовою Lua. Причина, з якої користувачі вибирають Pico-8, полягає в тому, що її можна використовувати прямо з коробки, без необхідності налаштування або зовнішніх редакторів, всі інструменти включені в пакет Lua-скриптів для самп, а навчання досить просте.

Порядок роботи:

  1. Зазвичай прийнято називати першу програму, яку створюють новою мовою, програмою "Hello world", але для мови програмування Lua набирають "Hello Lua".
  2. Скачують Pico-8.
  3. Встановлюють і запускають.
  4. Після завантаження надійде запрошення ">".
  5. Щоб отримати огляд можливих команд, натискають ESC.Тепер, коли редактор відкритий, вводять коди, зазначені на малюнку вище.
  6. Натискають ESC ще раз, щоб повернутися до запрошення, вводять CLS, а потім RUN.
  7. Отримують першу програму Lua на Pico-8.
  8. Для збереження скрипту використовують команду SAVE: SAVE HELLOLUA.
  9. Якщо потрібно працювати з програмою, можна застосувати функцію BTN (), яка забезпечує реагування на натискання клавіш.
  10. Щоб мати більше графічних можливостей, використовують дві спеціальні функції зворотного виклику, звані UPDATE і _DRAW.Следующая програма дозволяє переміщати коло за допомогою клавіш курсора.
  11. Натискають ESC, щоб перейти до редактора коду, вводять або копіюють і вставляють код, як на малюнку нижче.
  12. Натискають escape, щоб повернутися в консоль, і вводять RUN.

Pico-8 призначена тільки для відображення символів верхнього регістру, тому можна просто набирати шрифт, немає необхідності використовувати Shift або Caps-lock. Редактор також має синтаксичну розмальовку для коду. Якщо переглянути у верхньому правому куті редактора, можна побачити декілька значків. Це вбудовані інструменти для створення спрайтів, карт, звуків і музики. Цей приклад досить простий, але дає уявлення про редактор і мову.

Щоб дослідити більш цікаві приклади, можна перейти в каталог DEMOS. Для цього вводять: INSTALL_DEMOS. Потім відкривається каталог DEMOS з декількома прикладами програм для вивчення. Однією з головних переваг Lua є його простота. Деякі компанії використовують цю мову виключно через це, оскільки думають, що їхні співробітники зможуть працювати краще.

Деякі дуже прості мови, такі як Bash або Batch, не будуть достатньо сильними, щоб виконувати необхідні завдання, але Lua є одночасно потужною і простою програмою. Іншою важливою перевагою Lua скриптів для css v34 є їх здатність впроваджуватися, що визнається однією з найважливіших характеристик цього продукту протягом усього етапу його розвитку. Такі ігри, як World of Warcraft або ROBLOX, мають можливість вбудовувати Lua в свій додаток.