Домой Электроника Lua-скрипты: примеры, как установить и запустить

Lua-скрипты: примеры, как установить и запустить

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». Можно создать новую пустую область с «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 FilesSteamsteamapps\garrysmod», но может отличаться на компьютере — «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, включенные в эту загрузку, статически связаны для производительности. Они могут работать не так, как ожидалось пользователем, при использовании с некоторыми сторонними пакетами.

    История версий:

  • V1.12 — добавлен скраб, tostringall, проект Visual Studio обновлен до Visual Studio 2008 Visual C ++. Runtime теперь статически связана, что должно устранить некоторые проблемы, связанные с lua-wow при определенных установках Windows.
  • Lua скрипты v34 c — добавлено strrelpace (string.replace, wow.strreplace).
  • V1.10.1 — добавлен msvcr80.dll в проект windows.
  • V1.10 — реорганизованные файлы readme. Переименованные проекты msvc и имена выхода exe. Проект msvc включает в себя значок и ресурсы Lua для исполняемых файлов.
  • V1.9 — добавлены глобальные версии тригонометрических функций. Программа правильно используют градусы .strsplit, напечатает соответствующее сообщение об ошибке, если оно переполнит стек, что теперь уже невозможно практически с помощью strjoin.
  • V1.8 – обновленная совместимость 5.0 openlib, поскольку WoW не использует libs в любом случае.
  • V1.7 — изменено GCPAUSE до 110 на WoW 2.1. Устранено несколько разных предупреждений компилятора.
  • V1.6.1 — добавлен #define LUA_LIB для lwowlib & lbitlib для исправления проблем компиляции в Lua скриптах для самп.
  • V1.6 — обновлен битлиб до последней версии. Теперь он корректно использует 32-битные целые числа, как WoW. Глобальные псевдонимы для функций bitlib и table.setn были удалены, поскольку они не существуют в WoW.
  • V1.5.1 — игнорирует знак порядка байтов UTF-8.
  • V1.5 — добавлен debugstack, сделаны некоторые небольшие оптимизации и упрощения кода.
  • V1.4 — добавлен выбор аргумента в string.format.
  • V1.3.1 — исправлена проблема с 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 в свое приложение.