Новини високих технологій
» » Lua-скрипти: приклади, як встановити і запустити

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

25-10-2018, 12:10
585
Lua не є интерпретированным мовою і генерує байт-код з іншої програми, наприклад, Java. Ця програма працює на віртуальній машині Lua VM. Більшість таких пристроїв називаються стеками, але Lua відрізняється тим, що вона заснована на регістрах і є однією з перших широко використовуваних VM в ігровій сфері. Перевага регисторной архітектури полягає в тому, що вона дозволяє уникнути великої кількості копированных даних і зменшує обсяг інструкцій для функції. Lua VM володіє автоматичним управлінням пам'яті і скиданням непотрібної інформації, що забезпечує ідеальну конфігурацію для створення сценаріїв швидкого прототипування.

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

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


Ця мова програмування був створений в Бразилії в 1993 році програмістами Роберто Иерусальшимом, Луїсом Енріке де Фигеиредо і Вальдемаром Целесом в університеті Ріо-де-Жанейро, де знаходиться офіс «LabLua». Назва походить від португальського, що в перекладі означає - місяць. Одним з попередників була мова SOL (Simple Object Language). Оскільки ім'я Lua є іменником, а не абревіатурою, воно не повинно писатися, як LUA, а саме як Lua. Це гнучкий мову, він використовується на декількох напрямках: Вікіпедія застосовує Lua для сценаріїв шаблонів. Медіаплеєр VLC працює зі сценаріями Lua-скриптів для quik. Lua використовується в промислових додатках, таких як Adobe Lightroom. Програми для вбудованих систем, таких як проміжне Ginga для цифрового телебачення. Гри - мова є провідним для сценаріїв в іграх, наприклад, використовується при створенні World of Warcraft і Angry Birds. Кожному доступно спробувати застосування коду онлайн у Lua Demo з цікавим способом вивчення і використанням ігрового движка. Функціонал цієї програми можна використовувати в L?VE, Defold і, звичайно ж, в Pico-8.


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

Lua використовує дуже спрощений синтаксис. Користувачеві не потрібно застосовувати крапки з комами або великі прогалини, тому що ці знаки самі інтерпретуються програмою. Всі змінні в скриптах Lua для quik за замовчуванням глобальні. Тому завжди потрібно вказувати, коли локальні значення потрібні для поточної області і заздалегідь оголошувати їх. Фактично на практиці існує дуже мало випадків, коли насправді потрібні глобальні значення. Можна визначити локальну змінну з ключовим словом local. При цьому значення її оголошувати не потрібно. Глобальні змінні означають контекст поточного сценарію і тому не є такими для кожного окремого скрипта в грі, які кожен працюють самостійно і автономно.
Змінні можуть містити будь-яку послідовність цифр, букв і підкреслень, але вони не повинні починатися з цифри. Null являє ключове слово, коли змінні не визначені. Неоголошені відрізняються від оголошених змінних, які не мають значення. Приклади скриптів Lua:

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

Блоки визначаються певними ключовими словами, після чого слід «end». Умови в операторах if повинні супроводжуватися ключевиками «then». If заяви використовують «elseif», а не «else if». Можна створити нову порожню область з «doend» блоком. 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 скрипт потрібно враховувати, що код всередині буде запускатися не менше одного разу. Цикл повторення зазвичай уникають у розробці цієї мови, оскільки його прецедент обмежений і важко читаємо з-за того, що не використовує стандартний doend синтаксис.

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

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

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

"Луа" надає кілька таблиць в глобальному просторі імен, які містять допоміжні функції, такі як «string», «table» і «math». Таким чином, користувач ніколи не повинен вказувати якусь змінну з названих, оскільки вони будуть перерозподіляти масиви, що містять корисні функції. Існують дві таблиці, які спільно використовуються всіма сценаріями на сервер або клієнт (але не для обох) - це «_G» і «shared». Перша - справді глобальна, яка реалізується через окремі скрипти, тому, якщо потрібно отримати або встановити значення з неї, використовують «_G.something». «Strings» (Струни) - цією функцією Lua може декількома способами визначити рядковий літерал і багаторядкові дані, використовуючи подвійні квадратні дужки. І також можна помістити будь-яку кількість знаків рівності (=) між квадратними дужками ([===[ ]===]). Вони збалансовані, можуть включати в себе послідовності всередині, як ]]. Lua також має власний набір вбудованих функцій маніпуляції рядками і власну, витиснену версію регулярних виразів, які називаються рядковими шаблонами.

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

Це дуже прості перші кроки з написання програми, але вони є хорошими відправними точками для злому скриптів Garry Mod 10 Lua. Перший крок - створюють фактичний файл сценарію Lua. Відкривають текст або редактор - блокнот буде відмінно працювати для цієї мети. Далі зберігають цей файл, прописуючи, як на малюнку.
Де: - ім'я користувача паролів. - каталог Steam для Garry's Mod. Місце установки за замовчуванням для Lua-скриптів для garry s mod зазвичай «C:Program FilesSteamsteamappsgarrysmod», але може відрізнятися на комп'ютері - «autorunclient». Будь-які файли сценаріїв, поміщені в цей каталог, будуть запускатися при запуску Lua на клієнта, наприклад, коли почнеться нова гра або користувач приєднується до сервера. Далі створюють файл типу Hello World, додаючи до нього сценарій lua mod скриптів. Це найпростіший варіант.
Це може здаватися трохи заплутаним відразу. Скрипт видає вміст таблиці (які масиви або списки викликаються) і перехоплює дані до команди консолі, щоб підтвердити, що потрібно визначити функцію, яка яка не приймає ніяких параметрів і не повертає значення, але обов'язково встановлює «кінець» наприкінці своїх команд. Функції - це модульні фрагменти коду, які можна використовувати кілька разів. У цьому прикладі показано, як запустити скрипт Lua. Тут створено список рядків, але користувач також може додавати і інші об'єкти. Таблиці є асоціативними або хешірованнимі. Це означає, що кожен елемент списку може посилатися на ключ.
Ці команди роздруковують усі елементи таблиці, а структура називається циклом. Звертають увагу на команду пари «myTable», яка запускається один раз для кожного елемента і повертає пари ключ/значення для значень у списку. Значення - це елемент в таблиці, а ключ - це просто спосіб посилання на нього. Цей приклад показує, як виводити текстові і значення змінних з тією ж командою друку. Змінні «ключ» і «значення» встановлюються в циклі вище. Звертають увагу на «» між рядками і змінними. Символ «» - оператор конкатенації Lua. Це говорить мови, що потрібно склеїти два елементи разом і розглядати їх як один текстовий рядок «.concommand.Add»: my_test_function; myTestFunction. Запис створює консольну команду, яка запускає тільки що ініційовану функцію. Першим її параметром є ім'я команди управління, у цьому випадку: «my_test_function». Це те, що користувач вводить в консоль мод Garry для запуску скрипта. Другий параметр - це функція для запуску, в цьому випадку: myTestFunction. Цей файл згодом потрібно зберегти. Далі тестують скрипт, запускають Garry's Mod нову гру. Після цього відчиняють консоль, використовуючи тильда (~). Якщо вона не з'являється, тоді потрібно увімкнути її, вводячи «my_test_function» в рядок у нижній частині панелі. Після запуску почнеться автоматичне заповнення екрану з ім'ям команди, натискають Enter, щоб її запустити.

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

Ця консоль призначена для прямого введення коду Lua (наприклад, команда команди Lua (8 + 9) відразу виводить результат 17). Її функції: Основне вікно для вихідного коду з функціями його збереження і завантаження. Відладчик сценарію з точками останова, одноступінчастий виконання і вид змінної. Функції для створення таблиць. Функції для створення діаграм. Функції для створення графічних зображень. Функції для створення векторних графіків. Онлайн-допомогу для створення функцій Lua. Точки консолі зупинки можуть бути встановлені клацанням поруч із номером рядка. Якщо включений режим відладки, вид змінної буде видно в правій частині головного вікна. Її розмір можна змінювати, перетягуючи ліву кордон. Різні параметри режиму налагодження «вкл.» чи «викл.» зберігаються і відновлюються, коли він увімкнений або вимкнений. Можна застосовувати колесо миші для зміни видимого розміру діаграми та графіки. Праву кнопку миші можна використовувати, щоб відкрити контекстне меню для діаграм з їх функціями масштабування. SAMP Lua-скрипти - це бібліотека lua для Moonloader, яка додає деякі команди, щоб спростити модифікацію SA: MP,SAMP. Events дає можливість обробляти SA: MP вхідні та вихідні низькорівневі мережеві пакети дуже простим способом. Можна переписати дані, встановивши всі аргументи в таблиці в правильному порядку, чи можна перервати обробку будь-яких пакетів, повернувши false, яка запобігає зміна користувачем позиції гравця.Перед тим як встановити Lua-скрипт samp, можна додати власний обробник пакетів.

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

Так називається дистрибутив вихідного коду Lua, модифікований для відповідності середовищі аддонов World of Warcraft. Його дані: Адміністратори: morlando. Користувачі: morlando. Ліцензія: MIT /X. Мова: c, lua 5. Мітки: перекладачі, засоби тестування. Операційні системи: macros, windows, os independent. Ця версія мови налаштована на відповідність середовищі Lua World of Warcraft. Всі параметри сумісності 5.0-5.1 відключені, крім openlib. Бібліотека битлиба працює. Деякі wow Lua скрипти - специфічні, Lua-бібліотечні функції реалізовані. Програмою надаються глобальні псевдоніми для функцій «Lua.string.format», вони можуть використовувати вибір аргументів з Lua 4.0. Двійкові файли Windows, включені в цю завантаження, статично пов'язані для продуктивності. Вони можуть працювати не так, як очікувалося користувачем, при використанні з деякими іншими пакетами. Історія версій: V112 - доданий скраб, tostringall, проект Visual Studio оновлено до Visual Studio 2008 Visual C ++. Runtime тепер статично пов'язана, що має усунути деякі проблеми, пов'язані з lua-wow при певних Windows. Lua скрипти v34 c - додано strrelpace (string.replace, wow.strreplace). V1101 - додано msvcr80.dll у проект windows. V110 - реорганізовані файли readme. Перейменовані проекти msvc і імена виходу exe. Проект msvc включає в себе значок і ресурси Lua для виконуваних файлів. V1.9 - додані глобальні версії тригонометричних функцій. Програма правильно використовують градуси .strsplit, надрукує відповідне повідомлення про помилку, якщо вона переповнить стек, що тепер вже практично неможливо з допомогою strjoin. V1.8 – оновлена сумісність 5.0 openlib, оскільки WoW не використовує libs в будь-якому випадку. V1.7 - змінено GCPAUSE до 110 на WoW 2.1. Виправлено кілька різних попереджень компілятора. V161 - доданий #define LUA_LIB для lwowlib & lbitlib для виправлення проблем компіляції в Lua скриптах для сампо. V1.6 - оновлено битлиб до останньої версії. Тепер він коректно використовує 32-розрядні цілі числа, як WoW. Глобальні псевдоніми для функцій bitlib і table.setn були видалені, оскільки вони не існують в WoW. V151 - ігнорує знак порядку байтів UTF-8. V1.5 - доданий debugstack, деякі невеликі оптимізації та спрощення коду. V1.4 - доданий вибір аргументу string.format. V131 - виправлена проблема з Makefile. V1.3 - додані специфічні функції, глобальні псевдоніми, css Lua скрипти. V1.2 - цей пакет тепер можна використовувати в якості заміни для стандартного дистрибутива джерела Lua: проект MSVC, включаючи попередньо скомпільовані бінарні файли Windows, тепер знаходяться в підкаталозі msvc, інша структура каталогів не порушена. V1.1 - доданий BitLib. Оптимізований розмір файлу Luac.exe. Включає в себе тестові програми.

Ігровий движок Pico-8

Pico-8 - це фантастична програма, яка емулює повну ігрову консоль з обмеженими 8-бітними специфікаціями. Вона має всі необхідні інструменти для програмування мовою Lua. Причина, по якій користувачі вибирають Pico-8 полягає в тому, що її можна використовувати прямо з коробки, без необхідності установки або зовнішніх редакторів, всі інструменти включені в пакет Lua-скриптів для сампо, а навчання досить просте.
Порядок роботи: Зазвичай прийнято називати першу програму, яку створюють на новому мовою, програмою «Hello world», але для мови програмування Lua набирають «Hello Lua». Скачують Pico-8. Встановлюють і запускають. Після завантаження надійде запрошення «>». Щоб отримати огляд можливих команд, натискають клавішу ESC.Тепер, коли редактор відкритий, вводять коди, зазначені на малюнку вище. Натискають ESC ще раз, щоб повернутися до запрошення, вводять CLS, а потім RUN. Отримують першу програму Lua на Pico-8. Для збереження скрипта використовують команду SAVE: SAVE HELLOLUA. Якщо потрібно попрацювати з програмою, можна застосувати функцію BTN (), яка забезпечує реагування на натискання клавіш. Щоб мати більше графічних можливостей, використовують дві спеціальні функції зворотного виклику, звані UPDATE і _DRAW.Наступна програма дозволяє переміщати коло за допомогою клавіш курсору. Натисніть ESC, щоб перейти до редактора коду, вводять або копіюють і вставляють код, як на малюнку нижче. Натискають escape, щоб повернутися в консоль, і вводять RUN.
Pico-8 призначена тільки для відображення символів верхнього регістру, тому можна просто набирати шрифт, немає необхідності використовувати Shift або Caps-lock. Редактор також має синтаксичну розмальовку для коду. Якщо подивитися у верхньому правому куті редактора, можна побачити кілька піктограм. Це вбудовані інструменти для створення спрайтів, карт, звуків і музики. Цей приклад досить простий, але дає уявлення про редакторі і мовою. Щоб досліджувати більш цікаві приклади, можна перейти в каталог DEMOS. Для цього вводять: INSTALL_DEMOS. Після відкривається каталог DEMOS з кількома прикладами програм для вивчення. Одним з головних переваг Lua є його простота. Деякі компанії використовують цю мову виключно із-за цього, оскільки думають, що їх співробітники зможуть працювати краще. Деякі дуже прості мови, такі як Bash або Batch, не будуть достатньо сильними, щоб виконувати необхідні завдання, але Lua є водночас потужною і простий програмою. Іншою важливою перевагою Lua скриптів для css v34 є їх здатність впроваджуватися, що визнається однією з найважливіших характеристик цього продукту протягом усього етапу його розвитку. Такі ігри, як World of Warcraft чи ROBLOX, мають можливість вбудовувати Lua у свою програму.
Цікаво по темі
Об'єкти JavaScript приклади
Об'єкти JavaScript приклади
Об'єкти є наріжним каменем jаvascript. Вбудовані типи даних представлені як об'єкти. Щоб бути успішним розробником jаvascript, потрібно
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в Сі - клас даних, значення яких мають схожі характеристики. Тип визначає внутрішнє подання даних у пам'яті. Основні типи даних: логічний,
Namespace PHP: приклад. Як використовувати простору імен в PHP?
Namespace PHP: приклад. Як використовувати простору імен в PHP?
Простір імен завжди існувало як частина алгоритму і завжди був «глобальним». В ході розробки великих проектів, коли створюється безліч файлів
Javascript Array для збереження необмеженої кількості змінних
Javascript Array для збереження необмеженої кількості змінних
Логічно масив займає проміжне положення між змінними і об'єктами. Практично не слід надавати особливого значення словам. У програмі є змінні і код.