Перейти к содержанию

Основы Lua

Wikipedia гласит:

Lua ([лу́а], «луна») — интерпретируемый язык программирования... Является свободно распространяемым, с открытыми исходными текстами на языке Си.

Это замечательный скриптовый язык, который позволяет вам программировать скрипты для игры, таким образом реализовывать какую-ту свою логику в Worms 3D или Worms 4: Mayhem.

Здесь будет рассказано о использовании Lua на примере Worms 4: Mayhem (для Worms 3D скрипты необходимо к тому же компилировать из *.lua в *.lub файл с помощью программы luac.exe)

Смысл скриптов

Итак, приступим! Сначала определимся что же такое скрипт? Понимать можно по-разному но мы будем называть это программкой, которая выполняется не операционной системой, а какой-то средой, в нашем случае это интерпретатор языка lua, встроенный в червяков. Интерпретатор - это программа, которая способна выполнять определённые программы, которые она понимает. Если это интерпретатор lua, то она выполняет наш скрипт на языке lua. Интерпретатор языка lua имеет чудесное свойство - с помощью него скрипту можно дать возможность управлять той программой, которая исполняет скрипт. То есть интерпретатор языка lua это лишь прослойка между нашим скриптом и червяками. Разработчики Worms заранее придумали, что им потребуется делать в скриптах. В частности они решили, что в их скриптах будут некоторые способы по-особому начать игру, управлять игровым процессом, изменять набор оружий у червей, делать взрывы, убивать и оживлять червей. Таким образом они “сообщили” интерпретатору, что скрипты могут делать, и всем скриптам стали доступны те возможности, которые придумали разработчики червей. С другой стороны, дав возможность скриптам так нахально что-то творить с игрой, разработчики потребовали от скриптов несколько требований, а именно наличие некоторых функций, например Initialize, которая инициализирует игровой процесс. Таким образом у скриптов есть некоторые возможности, предоставленные разработчиками, однако следует помнить, что разработчики предоставили только то, что посчитали нужным, в частности с помощью lua нельзя поменять меню в игре.

В чём работать?

Всё о чём мы будем далее говорить требует попыток воспроизвести это всё и понять, как всё работает. Конечно lua - код можно тестировать непосредственно в червях(об этом будет рассказано позже), однако так совершенно неудобно изучать язык, его самые простые конструкции, поэтому нужно другое решение. Для тестирования рекомендуем использовать другой lua-интерпретатор с редактором SciTE.

Установка и настройка SciTE с lua интерпретатором

  1. Скачайте редактор SciTE и интерпретатор lua
  2. Установите SciTE.
  3. Извлекаем содержимое второго архива в какое-либо надёжное место, желательно без пробелов в пути, например C:\lua
  4. На рабочем столе щёлкаем правой кнопкой на иконке "Мой компьютер", выбираем в меню "Свойства", переходим на вкладку "Дополнительно", жмём по кнопке "Переменные среды", ищем в списке системных переменных строчку Path, выбираем её и жмём кнопку изменить. В текстовом поле "Значение переменной" в конце добавляем текст ";C:\lua", жмём OK. В этом же окне под списком системных переменных жмём кнопку "Создать". В текстовом поле "Имя переменной" вводим "LUA_DIR", а в текстовом поле "Значение переменной" вводим "C:\lua", жмём OK. Аналогично добавляем ещё 2 переменные LUA_PATH = "?.lua;%LUA_DIR%\?.lua;%LUA_DIR%\L_DIR\?.lua" и LUA_CPATH = "?.dll;%LUA_DIR%\?.dll;%LUA_DIR%\C_DIR\?.dll".
  5. Скачайте файл настройки для редактора SciTE для языка lua тут и замените файл C:\Program Files\SciTE\languages\lua.properties на скаченный.
  6. Запустите SciTE. Наберите в редакторе текст:
print("Hello world!")

Сохраните файл как Hello.lua, а затем нажмите "Выполнить" в меню "Tools"(или кнопку F5). Внизу появится окошко консоли, в котором будет выведен результат работы вашего первого скрипта

lua.exe "C:\Documents and Settings\ДИМА\Рабочий стол\1111.lua"

Hello world! >Exit code: 0 Time: 0.24

Теперь любой код в статье, не относящийся к червякам, вы сможете тестировать прямо из редактора, набрав текст и нажав F5. Обратите внимание на то, что в статье приведены примеры с псевдокодом. К примеру там используется несуществующая фунция message. В большинстве случаев можно написать в начале скрипта:

message = print