Jump to content
Malandrinus

Язык Lua. Общие вопросы программирования

Recommended Posts

Dennis_Chikin    3,581

С чего начинать и где взять.

 

Установка Lua:
http://www.amk-team.ru/forum/index.php?showtopic=11584&p=629106

 

Руководство «Программирование на языке Lua», третье издание:
http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905308

Edited by Kirgudu

Share this post


Link to post
Share on other sites
Malandrinus    591

Неоднократно поступали предложения создать тему для обсуждения Lua и вопросов, связанных с программированием на нём. Также регулярно возникают достаточно интересные дискуссии в теме "Справочник" а также в других темах, типа "Скриптование и спавн" или ковырялки. Народ говорит много интересного, но либо тема непрофильная (как справочник) и приходится это всё вычищать, либо интересное обсуждение уходит по треду далеко назад и скрывается за тоннами вопросов по конфигам и пр. Поэтому есть основания надеяться, что данная тема будет полезна.

 

Здесь предлагается обсуждать язык Lua, его синтаксические особенности, производительность, приёмы использования стандартные и не очень. Также здесь предлагается постить примеры алгоритмов для решения разных достаточно общих задач, по возможности не сильно привязанных к игре. Естественно, поскольку форум пока ещё по сталкеру, привязки к игре не избежать. Также, полагаю именно здесь можно вести умные разговоры об оптимизации и всяких общих вещах, типа парадигм объектно-ориентированного программирования, обработки ошибок и технологий отладки скриптов, стиля оформления кода и "единственно правильного пути" в программировании, как вы его видите =)

Edited by malandrinus

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Nazgool    246

malandrinus

Исходя из собственного незначительного опыта, и для упреждения беспорядка в топике предлагаю вынести в шапку следующие пункты :

  1. 1 Установка Lua

2 Справочник по Lua 5.1

  • 2.1 Введение

2.2 Описание языка

2.3 Стандартные библиотеки

2.4 ООП

3 Ссылки

На данный момент считаю этот набор достаточным. По мере необходимости построение можно будет расширять и дополнять.

Думаю что в таком контексте наполнение топика общей информацией будет более упорядоченным.

Это лично моё, субъективное, мнение, т.к. для подобного порядка наполнения имею немало информации.

Пункты от 2.1 до 2.4 расширятся также. (например описание COROUTINE можно перенести в "2.3 Стандартные библиотеки".

Но это уже по ходу дела.

Хотелось бы услышать мнение сообщества.

 

------------------------------

У меня установлены свои версии, но качаем новейшие.

Для пункта "1 Установка Lua"

Качаем и устанавливаем Lua for Windows. Например отсюда :

http://code.google.com/p/luaforwindows/downloads/list

 

P.S. У меня проверенная, надёжная старушка 5.1.4-35.

Но не суть.

 

После установки у Вас (по умолчанию) на диске С в папке Program Files появиться папка lua.

Далее по адресу C:\Program Files\Lua\5.1\ удаляем папку SciTE.

 

Качаем SciTE. Тоже например отсюда :

http://soft.softodrom.ru/ap/SciTE-p6800

Устанавливаем её в папку C:\Program Files\Lua\5.1\SciTE

 

Далее идём на (как там Вам удобно) --> "Рабочий стол" --> "Мой компьютер"(Правый клик) --> "Свойства " --> "Дополнительно" --> "Переменные среды"(Параметры) --> в окне "Системные переменные" проверяем наличие полей :

  • Имя переменной LUA_DEV
  • Значение переменной C:\Program Files\Lua\5.1
  • Имя переменной LUA_PATH
  • Значение переменной ;C:\Program Files\Lua\5.1\lua\?.luac
  • Имя переменной Path
  • Значение переменной (смотрим в конце после всего) ";C:\Program Files\Lua\5.1;C:\Program Files\Lua\5.1\clibs"
Если каких то нет, то прописать как указано.

После этого запустить SciTE, написать - print('Hello Word')

В открывшейся консоли должно напечатать - Hello Word

Если напечатало, то можно приступать к дальнейшим настройкам.

 

------------------------------

malandrinus

Вот мои доводы. Только не многое захотят с этим разбираться, а на самом то деле... :

http://scite-ru.googlecode.com/svn/trunk/p...u_Pack_rus.html

А вот либы в сборке, а если нет, то можно легко подключить :

http://code.google.com/p/luaforwindows/

Но это всё уже пойдёт в категорию "Ссылки" :-) Когда соберу до кучи.

Edited by Cyclone
  • Thanks 1
  • Like 1
  • Согласен 1

Share this post


Link to post
Share on other sites
Malandrinus    591

Признаться, не думал, что так для всех важен редактор. Какое вообще отношение редактор имеет к языку? Lua же платформенно-независимый!

 

Короче, от сего момента буду нещадно тереть любое упоминание о редакторах, не несущее конструктивной информации. Однако приветствуется:

- перечисление дельных фишек конкретного редактора

- приведение конкретной информации о настройках, ссылки на полезные мануалы, решение проблем и т.п.

- вопросы в этом же ключе

 

И повторяю вопрос. Знает ли кто, чем можно автоматически отформатировать Lua программу? Я не имею в виду поддержание текущего отступа, это тривиально. Я хочу как в Visual Studio, выделил фрагмент, нажал кнопочку, и мой фрагмент отформатирован. Причём, это не только красоты ради надо. Подобный инструмент безумно помогает искать потерянные/лишние концы блоков.

 

Поскольку я потёр оригинальный пост break (погорячился, прошу прощения), то привожу ссылку на ру-борд-овский форум по SciTE здесь

_http://forum.ru-board.com/topic.cgi?forum=5&topic=35160

потом, надеюсь, соберём всё в шапке

Edited by malandrinus

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Artos    94

malandrinus

Может быть кто-то знает такой инструмент по форматированию LUA контента и посоветует, но мне готовое не известно, но ...

Мысль в слух: Подобное форматирование вероятнее, если и реализуемо, то в виде макроса(ов). Если найти или написать требуемый макрос - то уже упоминавшиеся SciTE или UltraEdit позволяют подключать макросы и пользоваться ими. Обычно около 'крупных' редакторов для программеров формируется комьюнити, которое пишет что-то и на темы форматирований текстов, и выкладывает в депозитории. Могу ошибаться, т.к. давно не занимался такими поисками - но что-то на тему форматирования текстов на уровне макросов попадалось пару лет назад.

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Malandrinus    591

Вот устанавливал себе SciTE по ссылкам с руборда. Сразу покритикую, пока не остыло:

1. Установщик требует прав администратора. На корпоративный компьютер поставить смог только частично и с бубном. Пришлось распаковывать установщик вручную, делать промежуточный командный файл с SET-ами и т.п.

2. Русская (как бы) версия имеет нелокализованный по умолчанию интерфейс. Как это изменить, не нашёл.

3. Настройки в виде текстового файла. Чтобы найти нужную опцию надо листать простыню из больше десятка страниц. Это шутка такая?

4. Окно About выглядит насмешкой, поскольку в нём собственно "о программе" нет ни слова

5. Мелочи, типа отсутствия на тулбаре кнопки поставить брейкпоинт, это вроде как и не недостатки, но смотря на п.3 (выше) это уже становится недостатком.

6. Да вот ещё, нет кнопочек закрытия на каждой вкладке. Очень неудобно.

Edited by malandrinus

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Nazgool    246

malandrinus

Про новые версии сказать ничего не могу. У меня 2.25 .93Ru и интерфейс русский, и настройки не в виде текстового файла, а виде файла properties(это для SciTE то же самое, что и ini)

А это значит что поддерживается фолдинг. Так, не буду забегать вперёд.

Сейчас как раз пишу о настройках редактора. Там пытаюсь кое что рассказать.

 

Добавлено через 43 мин.:

Для пользователей SciTE.

Настройка редактора.

Сразу хочу сказать, что при желании настраивать можно много чего, но я остановлюсь на некоторых из настроек.

Далее вы уже сами будете смотреть что нужно, а без чего можно и обойтись.

Итак, запустите редактор. Выберите пункт меню "Настройки" и в нём перейдите к строке "Подключенные настройки".

В выпадающем списке выберите (по одному) следующие файлы, которые откроются в редакторе :

  • Открыть lua.properties
  • Открыть others.properties
Начнём изменять.

P.S. Я уже и не помню как было изначально, поэтому покажу как у меня, а там Вы уже сами разберётесь.

 

Переходим к файлу lua.properties.

В самом начале ищем строку

file.patterns.lua=*.lua; и т.д.

В конце строки перечисления расширений добавляем (через двоеточие)

file.patterns.lua=*.lua; ... ;*.script

Это делается для того, чтобы к файлам с расширением .script применялась такая же подсветка синтаксиса, как и для lua.

 

Далее опускаемся почти к концу файла и ищем строку :

command.compile.*.lua=LuaC-5.0.exe -o "$(FileName).luc" "$(FileNameExt)"

Комментим её (символом #), и ниже пишем такую строку :

command.compile.*.lua=luac.exe -o "$(FileName).luc" "$(FilePath)"

Это нужно для компиляции файла в бинарник.

 

Теперь (где-то рядышком) ищем строку :

command.go.*.lua=lua -e "io.stdout:setvbuf 'no'" "$(FileNameExt)"

(и если есть строку command.go.subsystem.*.lua;*.macro=3)

Тоже комментим её(их), и ниже пишем новую строку :

command.go.*.lua=lua "$(FilePath)"

Этим самым настраивается интерпретатор для работы с lua.

С этим файлом пока всё. Сохраняем.

 

Переходим к файлу others.properties

В первой же строке :

file.patterns.props= ...

дописываем в конце ;*.ltx

Сохраняем.

После этого открывая в редакторе файлы с расширением *.ltx, к ним применяется подсветка файлов *.INI, *.CFG.

Т.е. все секции окажутся свёрнутыми, и останется только название секции.

Слева от текстового окна находится колонка фолдинга, с помощью которой можно разворачивать/сворачивать блоки, секции.

Свернуть/развернуть сразу все блоки(секции) можно с помощью пункта контекстоного меню, открывающегося при правом клике на окне с текстом кода.

Фолдинг поддерживается также для файлов lua(а благодаря нашим настройкам и *.script), xml и др.

 

Ну вот первая капля в море уже есть :-)

Мог что-то забыть, но походу дела исправим если нужно.

Чуть позже напишу об использовании аббревиатур, в качестве автодополнения кода.

 

Edited by Gun12
  • Like 1
  • Полезно 1

Share this post


Link to post
Share on other sites
Artos    94

malandrinus

Странно, слова твоей критики больше подходят к пользователям Винды и меньше к программерам.

1. По умолчанию программистский софт ставится или с административными правами или с расширенными.

"Lua for Windows", частью которого и является SciTE, требует при установке именно прав админа.

2. Следствие некорректной/частичной установки.

3. Есть два подхода: Windows - "Запрещено все, что неразрешено" и UNUX - "Разрешено все, что не запрешено".

Ты просто привык к первому.

4. Это все же продукт для тех, кто знает что ставит и чем пользуется, а не для тех, кто сам не помнит что поставил и зачем.

Минимальная инфа есть: версия, ссылки ...

5. согласен, но возможно можно настроить.

6. согласен, хотя опять таки тут конфликт взглядов. Если я сижу и обеими руками стучу по клаве, то мне более чем достаточно хоткея (Ctrl+W), для закрытия окон, чем искать мышь позиционировать на крестик и кликать ...

 

На первый взгляд и первое время мало какой софт воспринимается удобным, если человек уже привык к чему-то иному. Все же везде требуется адаптационный период.

Ну а если что-то остается неудобным или недостаточным - поэтому я ранее и писал о том, что в основном сижу в UE, а SciTE - тогда, когда именно занимаюсь около-"языковыми" вопросами.

 

 

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Nazgool    246

Написал

В конце строки перечисления расширений добавляем (через двоеточие)

Через точку с запятой конечно.

Исправьте если можно и удалите, плз, этот пост.

Edited by Gun12

Share this post


Link to post
Share on other sites
Artos    94

Вопрос: Каковы возможности в LUA (применительно к Сталкеру) по работе из скриптов со стеком?

 

В мануале по LUA достаточно куцая информация и практически только для внешнего использования (применительно к С/С+) ...

Помнится в том же Perl'е из скриптов работа со стеком хотя и редко, но используется и нередко позволяет сильно ускорить отдельные операции.

Есть ли какие мануалы/статьи/примеры по стековым методам/операциям для LUA?

 

Добавлено через 33 мин.:

Gun12, поправлю:

ищем строку :

command.go.*.lua=lua -e "io.stdout:setvbuf 'no'" "$(FileNameExt)"

(и если есть строку command.go.subsystem.*.lua;*.macro=3)

Тоже комментим её(их), и ниже пишем новую строку :

command.go.*.lua=lua "$(FilePath)"

Этим самым настраивается интерпретатор для работы с lua.

строка для возможности запускать скрипты из Сталкера (*.script) должна быть:

 

command.go.*.lua;*.macro;*.script=dofile $(FilePath)

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Nazgool    246

Вот чувствовал что забыл что-то.

У меня, например, это в отдельной строке (эксперименты знаете ли)

command.go.*.script=lua "$(FilePath)"

Кстати выполнять выделенную часть кода можно комбинацией "Ctrl + 4"

Edited by Gun12

Share this post


Link to post
Share on other sites
abramcumner    788

Artos, Gun12,

строка для возможности запускать скрипты из Сталкера (*.script) должна быть:

command.go.*.lua;*.macro;*.script=dofile $(FilePath)

По идее же сталкеровские скрипты не будут работать - содержимое lua_help.script не экспортировано. Или это можно как-то обойти?

Share this post


Link to post
Share on other sites
Artos    94
abramcumner: содержимое lua_help.script не экспортировано

Ну, во-первых, это и не скрипт (lua_help), а считай напоминалка модмейкерам ... далеко не полная и нередко устаревшая.

Во вторых, даже если ... то мы-то кто(?) - модмейкры, т.е. те кто сами пишет/добавляет и классы и пр. - значит "наше" самописное тоже добавлять потребовалось бы.

 

Само собою, любой скрипт, в котором будут встречаться неопределенные переменные/классы/функции будет выполняться ровно настолько, насколько это все неизвестное определено/доступно.

 

Мне, например достаточно проверять не полностью скрипты из игры, которые привык писать для нее, а автономные простенькие, в которых не используются внешние переменные и пр.

Проверить работоспособность, скорость, сравнить, получить результат некоей вычислительной функции - все это и позволяет SciTE при его адаптации в игре (к файлам *.script).

Ну и ... можно же и экспортировать нужное тебе ;)

 

(поэтому мод пишу в UE, но нередко обращаюсь к SciTE, когда вопрос по чистому LUA)

 

Добавлено через 9 мин.:

Gun12: Кстати выполнять выделенную часть кода можно комбинацией "Ctrl + 4"

А вот если пояснишь, как это реализовать для скриптов игры (*.script) - был бы благодарен, т.к. как-то не нашел времени раскопать это ...

А выдирать нужные фрагменты в отдельные фалы - утомительно порою.

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Nazgool    246
... как это реализовать для скриптов игры (*.script)

Может я не так понял вопрос? Это работает только в контексте активного открытого файла.

Открываешь файл *.script в SciTE, выделяешь нужную часть, нажимаешь "Ctrl+4".

 

Share this post


Link to post
Share on other sites
Artos    94

Gun12, именно про это и говорю, но ... при моих настройках, в которых не правил данный момент отсутствует возможность выполнять выбранный фрагмент кода.

Вероятно это настраивается тут:

# Команда- Выполнить выделенный тект (Ctrl+4)
command.name.4.$(file.patterns.lua)=Execute Selection
command.4.$(file.patterns.lua)=dostring $(CurrentSelection)
command.mode.4.$(file.patterns.lua)=subsystem:lua,savebefore:no

- но при дефолтых строках именно с *.script "Открываю -> выделяю -> нажимаю ->" - только панельки тоолбаров подмигивают, консоль пуста.

(версия SciTE та же , что и у тебя, хотя установлена 'параллельно' исходной)

 

P.S. Выложи, если возможно, твои настройки или, как говорил 'портированный вариант для флешки'.

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Nazgool    246

При тех настройках что я дал должно работать.

Т.е. по адресу меню "Tools" --> "script" --> должно появиться поле "Выполнить выделенное Ctrl+4"

В файле lua.properties должна быть запись

file.patterns.lua=*.lua;*.wlua;*.lexe;*.glua;*.gluaw;*.mlua;*.clua;*.macro;*.script

Иначе не работает

 

Portable вариант нужно ещё подготовить. Может завтра?

Edited by Gun12

Share this post


Link to post
Share on other sites
Malandrinus    591

Я всё же надеюсь, что здесь начнётся разговор про Lua. Пока говорим только про SciTE. Создаётся ощущение, что изучение Lua совершенно немыслимо без SciTE.

  • Like 1

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Nazgool    246

В SciTE присутствует боковая панель, в которой (в закладке "abbrev") находится список автоформатов выражений.

Двойной клик на нужной строке вставляет в текст кода необходимое выражение.

Или же при наборе выскочит окошко с возможным макросом, который вставляется по нажатию клавиши Enter/

Имея привычку пользоваться данным инструментом можно не беспокоится о "забытом" end-е, или о...В общем как Вы сами захотите настроить.

А настраивается это дело по адресу .\Lua\5.1\SciTE\abbrev\lua.abbrev

Как и что там писать, думаю, особого труда не составит.

 

malandrinus

Да кто же против? Будут у меня вопросы - задам, будут у других - попытаюсь ответить.

А пока преследую свою цель. А именно постепенно выкладываю информацию согласно своей стандартизации.

Сразу всё выложить не в состоянии.

Edited by Gun12

Share this post


Link to post
Share on other sites
Malandrinus    591

Artos,

это и не скрипт (lua_help), а считай напоминалка модмейкерам ... далеко не полная и нередко устаревшая.

Не соглашусь по обоим пунктам. Это полная и в силу этого актуальная информация. Хотя разумеется полная лишь в том смысле, что там перечислено всё, что экспортировано. Конечно, описания там никакого, и потому называть это "help" было в каком-то смысле издевательством.


 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Artos    94

(алаверды)

malandrinus, Пока говорим только про SciTE

Cм. вопрос: #9 ... и тишина. :-)

malandrinus, Не соглашусь по обоим пунктам

В моей фразе три пункта, поэтому по трем:

1. не скрипт - кроме расширения к скриптам этот файл не имеет никакого отношения.

2.1. далеко не полная - использовано относительное определение. То, что кому-то 'близко', для кого-то 'далеко'. Согласен, что 'далеко' несколько утрированно, но суть 'не полноты' передает.

2.2. 'Полнота' не обозначена чего именно, и тобою же самим делается оговорка. И даже в том смысле что "там перечислено всё, что экспортировано" - не соглашусь с определением "все". Распечатка даже некоторых методов говорит о далеко не полном перечислении их функций и пр. в этом файле.

3. устаревшая - то, что в этом файле перечислены методы, которые может быть когда-то и работали в каких-то билдах, но не работают с теми релизами, в которых этот файл присутствует - иначе не называют.

Остаюсь при своем мнении, что это всего лишь напоминалка, хотя и достаточно наполненная и даже в чем-то избыточная (на мой взгяд).

Для новичков в модинге, я ее называю "азбука"

 

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Nazgool    246
... и тишина. :-)

Тоже жду кто ответит. Я таких возможностей не знаю. На данный момент считаю, что это можно сделать только из С (Lua C API).

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...