Этот небольшой пост родился после того, как я решил узнать, как можно запускать скрипты Lua совместно с игрой на C# (либо на другом .NET-языке). с использованием библиотеки LuaInterface. Я был впечатлен легкостью этого интерфейса по сравнению с lua.h на C++
Что нужно знать
C# на приличном уровне, иметь понятие об основах программирования, а также о подключении ссылок в проекте на Visual Studio
Начало
Исходники (со всеми dll, конечно) выложены в конце поста
Первое, что нужно сделать — подключить к нашему проекту LuaInterface.dll. Просто добавляем ссылку на файл .dll. Если вы еще не в курсе, как это делается, то можете найти мануалы в интернете. Также для подключения требуется luanet.dll
LuaInterface — библиотека для удобной интеграции между Lua и CLR
Lua — очень легкий скриптовый язык программирования. Вот его разбор
Для чего нужны скрипты — выдержка из другого моего поста
Скрытый текст
Если вы разрабатывали большие проекты (к примеру, масштабные игры), замечали, что с каждой новой сотней строк кода компиляция идет медленней?
УСТАНОВКА MOONLODER И LUA СКРИПТОВ
В игре создается больше оружия, больше диалогов, больше меню, больше etc.
Одна из самых главных проблем, возникающих в связи с нововведениями — поддерживать бессчетное множество оружия и бейджиков довольно сложное занятие.
В ситуации, когда просьба друга/босса/напарника изменить диалог или добавить новый вид оружия занимает слишком много времени, приходится прибегать к каким-то мерам — например, записи всей этой фигни в отдельные текстовые файлы.
Почти каждый геймдевелопер когда-нибудь делал карту уровней или диалоги в отдельном текстовом файле и потом их считывал. Взять хотя бы простейший вариант — олимпиадные задачи по информатике с файлом ввода
Но есть способ, на голову выше — использование скриптов.
«Окей, для таких дел хватает обычного файла с описанием характеристиков игрока. Но что делать, если в бурно развивающемся проекте почти каждый день приходится немножко изменять логику главного игрока, и, следовательно, много раз компилировать проект?»
Хороший вопрос. В этом случае нам на помощь приходят скрипты, держащие именно логику игрока со всеми характеристиками либо какой-либо другой части игры.
Естественно, удобнее всего держать, логику игрока в виде кода какого-нибудь языка программирования.
Первая мысль — написать свой интерпретатор своего скриптового языка, выкидывается из мозга через несколько секунд. Логика игрока определенно не стоит таких жутких затрат.
К счастью, есть специальные библиотеки скриптовых языков для С++, которые принимают на вход текстовый файл и выполняют его.
Об одном таком скриптовом языке Lua пойдет речь.
Теперь, когда у нас есть проект с подключенным LuaInterface, переходим к коду!
LuaInterface — основы
В основном .cs файле пишем
using LuaInterface;
Основной класс этой библиотеки — Lua
Lua lua = new Lua();
Объявление констант
0 Настройка персонального компьютера для работы с Lua
Очень просто можно объявить константы. Делается это так
lua[ключ] = значение;
lua[«version»] = 0.1; lua[«name»] = «YourName»; lua[«test»] = 200; lua[«color»] = new Color(); lua[«my»] = this;
В качестве значения может выступать что угодно — число, строка, даже классы и структуры (о том, как с ними работать, будет дальше)
Регистрация функций
В Lua можно зарегистрировать функцию из C#
lua.RegisterFunction(название функции в Lua, this, функция);
lua.RegisterFunction(«puts», this, typeof(Program).GetMethod(«Test»));
Регистрация классов и структур
Одна из самых приятных сторон LuaInterface, которая может удивить тех, кто использует Lua совместно с C++, это то, что можно регистрировать объект класса и после этого вызывать в скрипте разные функции «напрямую»
То есть можно сделать так:
class LuaDebug < // Запись любого текста с указанным цветом private void Print(string message, ConsoleColor color) < Console.ForegroundColor = color; Console.WriteLine(message); >public void Log(string message) < Print(«Log: » + message, ConsoleColor.White); >public void Warning(string message) < Print(«Warning: » + message, ConsoleColor.Yellow); >public void Error(string message) < Print(«Error: » + message, ConsoleColor.Red); >public string ConsoleRead() < return Console.ReadLine(); >> // . lua[«Debug»] = new LuaDebug();
str = Debug:ConsoleRead() — считывание строки Debug:Log(«Приложение запущено») Debug:Warning(«Введенная строка: » .. str) Debug:Log(«Удачного дня!») Debug:ConsoleRead() — пауза
Выполнение Lua кода
Выполнить Lua код (со всеми зарегистрированными функциями и константами) можно двумя способами
Первый — прямиком из C#
lua.DoString(код)
lua.DoString(«Debug:Log(‘Hello, Habr!’)» + «n» + «Debug:ConsoleRead()»);
Второй — из файла
lua.DoFile(file)
lua.DoFile(«script.lua»)
(Оба метода возвращают значение object[] — это то, что возвращает Lua скрипт после выполнения)
Обработка исключений
Для обработки исключений — ошибок, которые могут выскочить во время выполнения скрипта, следует использовать LuaException err
try < // Lua, lua, lua >catch (LuaException err) < // Обработка ошибки >
Вызов методов из Lua
Для вызова метода из Lua надо выполнить скрипт, выудить метод, и выполнять его когда потребуется.
Пример
lua.DoFile(«file.lua») LuaFunction func = lua[«func»] as LuaFunction; // function func() end func.Call();
Также в Call(params object[] args) можно передавать входные параметры для функции
Тот же финт срабатывает и со значениями, только вместо LuaFunction используем string, int, double и так далее
Дополнительные материалы
- Для таблиц в LuaInterface предусмотрен класс LuaTable, регистрируется в объекте класса Lua он как обычная переменная, а запись переменных в саму таблицу мало чем отличается от записи переменных в самом Lua объекте
- Также есть класс LuaDLL, используемый для «низкоуровневой» работы с Lua (из lua.h). Толку от него немного, и вряд ли кто-то использует его по-серьезному
Пример
LuaDLL.lua_open(); LuaDLL.lua_createtable(luaState, 1, 1);
Символика Lua
Love2D — один из самых популярных движков на Lua
Мод для Minecraft на Lua
https://bitbucket.org/Izaron/luaforhabr/src
Исходный код
Источник: habr.com
Как установить Lua скриптовой язык в Linux
Lua – бесплатный и открытый, мощный, надежный, минимальный и встраиваемый язык скриптов.
Это расширяемый и интерпретируемый язык сценариев, который динамически типизируются, выполняются путем интерпретации байт-кода с помощью виртуальной машины на основе регистров.
Lua работает на всех, если не на большинстве Unix-подобных операционных систем, включая Linux и Windows; на мобильных операционных системах (Android, iOS, BREW, Symbian, Windows Phone); на встроенных микропроцессорах (ARM и Rabbit); на мэйнфреймах IBM и многом другом.
Lua Особенности:
- Создает все системы со стандартным компилятором C.
- Он замечательно легкий, быстрый, эффективный и портативный.
- Его легко изучить и использовать.
- Он имеет простой и хорошо документированный API.
- Он поддерживает несколько типов программирования (например, процедурное, объектно-ориентированное, функциональное и управляемое данными программирование, а также описание данных).
- Реализует объектно-ориентированное использование мета-механизмов.
- Он также объединяет простой процедурный синтаксис с грозными конструкциями описания данных, внедренными вокруг ассоциативных массивов и расширяемой семантикой.
- Поставляется с автоматическим управлением памятью с инкрементной сборкой мусора (таким образом, он идеально подходит для реальной конфигурации, сценариев, а также для создания прототипов).
Как установить Lua в Linux
Пакет Lua доступен в официальных хранилищах основных дистрибутивов Linux, вы можете установить последнюю версию с помощью соответствующего диспетчера пакетов в вашей системе.
$ sudo apt install lua5.3 #Debian/Ubuntu systems # yum install epel-release yum install lua #RHEL/CentOS systems # dnf install lua #Fedora 22+
Примечание. Текущая версия пакета Lua в репозитории EPEL – 5.1.4; поэтому для установки текущей версии вам необходимо собрать и установить ее из исходников, как описано ниже.
Установка Lua из исходников
Во-первых, убедитесь, что в вашей системе установлены средства разработки, в противном случае выполните приведенную ниже команду, чтобы установить их.
$ sudo apt install build-essential libreadline-dev #Debian/Ubuntu systems # yum groupinstall «Development Tools» readline #RHEL/CentOS systems # dnf groupinstall «Development Tools» readline #Fedora 22+
Затем, чтобы создать и установить последнюю версию (версия 5.3.4 на момент написания этой статьи) Lua, запустите следующие команды, чтобы загрузить пакет tar ball, извлечь, построить и установить его.
$ mkdir lua_build $ cd lua_build $ curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz $ tar -zxf lua-5.3.4.tar.gz $ cd lua-5.3.4 $ make linux test $ sudo make install
После того, как вы его установили, запустите интерпретатор Lua, как показано:
Используя ваш любимый текстовый редактор, вы можете создать свою первую программу Lua следующим образом.
$ vi hello.lua
И добавьте следующий код в файл.
print(«Hello World») print(«This is Tecmint.com and we are testing Lua»)
Сохраните и закройте файл. Затем запустите свою программу, как показано ниже:
$ lua hello.lua
Для получения дополнительной информации и получения информации о том, как писать программы Lua, перейдите по адресу: https://www.lua.org/home.html
Lua – это универсальный язык программирования, который используется во многих отраслях (от Интернета до игр и обработки изображений и др.), И он разработан с высоким приоритетом для встроенных систем.
Если вы столкнулись с ошибками во время установки или просто хотите узнать больше, используйте форму комментариев ниже, чтобы отправить нам свои мысли.
Источник: itisgood.ru
Как запустить QLua(Lua) — скрипт в терминале QUIK
Для тог, чтобы запустить QLua(Lua) — скрипт в терминале QUIK, в начале нужно поместить его в какую-нибудь папку на Вашем компьютере. Удобно для этого создать новую папку в папке установки терминала, назвать ее, например, «MyLua», или так, как Вам нравится, и хранить в ней все Ваши Lua — скрипты.
Далее, нужно перейти в меню терминала QUIK по пути: «Сервисы» -> «Lua скрипты. «. Откроется окно, как на картинке. В этом окне нужно нажать кнопку «Добавить», далее, найти Ваш скрипт, открыть его. Таким образом он добавится в «Загруженные скрипты», после чего, его нужно выделить в этом окне (строка подсветится) и нажать кнопку «Запустить». Если в скрипте нет ошибок, то слева от его названия вместо «красного квадратика» появится «зеленый треугольник», это означает, что скрипт запущен, если в скрипте обнаружились ошибке, то информация об этом будет выведена в подокне «Ошибки выполнения скрипта» данного окна.
Чтобы остановить выполнение скрипта, в любой момент можно нажать кнопку «Остановить», при условии, что выделена строка с нужным скриптом. После запуска скрипта, Вы можете закрыть окно «Доступные скрипты» соответствующими кнопками.
ВАЖНО . Если Вы запустили скрипт и затем закрыли терминал QUIK, то при последующем запуске терминала скрипт автоматически запустится . Это удобно, например, при использовании скрипта автоматической авторизации.
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей .