Перейти к контенту

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


Рекомендуемые сообщения

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

 

Установка 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

Изменено пользователем Kirgudu
Ссылка на комментарий

RvP,

Основные претензии к встроенному random не столько насчёт скорости, сколько по поводу качества. Каково происхождение новой функции? Работает ли с ней randomseed?

Изменено пользователем malandrinus
 

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

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

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

 

Ссылка на комментарий

malandrinus, знаю. randomseed не работает, там автоматом первый член устанавливается как текущее время. Устанавливается при каждом создании луа потока, тоесть каждую загрузку или заход в игру.

Сам генератор взят отсюда

http://www.cyberguru.ru/cpp-sources/algori...isel-page3.html

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

RvP

Работает с любым патчем ТЧ.

1. Установил пакет dll-ек по инструкции. Пока никаких доп. вызовов из скриптов ( RvP() ) не произвожу.

2. Попытка запуск игры на 1.0004 и 1.0005 заканчивается выбросом окна ошибки от XR_3DA

"Точка входа в процедуру ?allocate@class_rep@detail@luabind@@QBE?AU&$pair@PAXPAX@stlp_std@@PAUlua_State@@@Z не найдена в библиотеке DLL XRLUA.DLL."

3. Запуск на 1.0006 упирается в первую же строку обработки стринга функцией 'string.format'.

Обход ее приводит к следующим ошибкам по всем функциям класса 'string'.

4. Активация вызовом RvP() из '_g.script' позволяет увидеть тестовый вывод в abs(string) - отображается в логе, но не меняет картины ... Игра рушится на обработках строк.

 

что не так (игра пока чистая, без модов/правок)?

Изменено пользователем Artos

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

Ссылка на комментарий

То есть разработчики все же не вносили изменений в luabind?

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

Ссылка на комментарий

RvP

С обновленным вариантом на 1.0004/5 игра стартует, но(!) как и ранее описывал для 1.0006 - при первом же вызове методов класса 'string' игра вылетает с фатал-еррором, ругаясь на nil-евые значения методов.

Внеся небольшую правку в _g.script оригинальной игры:

RvP()

function printf(fmt,...)
  --log(string.format(fmt,...)) --/< тут вылетает аналогично 23-ей строке
  abs("Test_Extended_Lua")
  abs("1st:"..fmt)
  abs(string.format(fmt,...)) --/< 23-я строка
end

Имеем вывод в логе первых двух строк и фатальный вылет с '_g.script:23: attempt to call field 'format' (a nil value)'.

Если тут заремить - вылетит далее на первом же string.XXX ...

Изменено пользователем Artos

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

Ссылка на комментарий

RvP, с последним вариантом игра (и с модами) пошла ... Но похоже есть нюансы при включенном функционале.

Подробнее - уже завтра.

 

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

P.S. Новый вариант math.random([a[, b]]) багует ...

 

math.random(1,100) => 169 и т.п. Т.е. вылетает за диапазон, что кое где критично.

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

Ссылка на комментарий

исправил генерацию числа из промежутка. Вернул стандартную функцию math.random, новая теперь math.rand

 

http://rghost.ru/25213001

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

RvP, спасибо за подправленную версию.

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

Очень полезно, что появилось пространство 'debug', в частности трассировка (debug.traceback).

Несколько пожеланий-рекомендаций:

1. Переименовывать исходную библиотеку не с суффиксом '_old', а с чем-то более нейтральным, например '_src'. У многих 'old/bak' ассоциируется с ненужным мусором, да и чистильщики дисков порой имеют в настройках ткакие маски. Т.о. можно ненароком удалить необходимое.

2. Уточнить в реадме, что версия 1.0000-1.0003 и для 1.0006 предназначается.

3. Дать команде вывода в лог наименование более функционально значимое чем 'abs', например 'to_log' иль 'logf'.

 

И вопрос: Каковы дальнейшие планы по работе с этим расширением? Планируется ли дальнейшее расширение функционала со стороны автора или это на откуп самим модмейкерам?

Изменено пользователем Artos

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

Ссылка на комментарий

Artos,

1. Был вариант с суффиксом "_GSC", возможно вернусь к нему.

2. Шестого патча не имею, его вообще не проверял, спасибо, уточню.

3. abs подсвечивается в редакторе :) а дальше уже можно в начале _G сделать

to_log = abs

или как по вкусу да и все.

upd

тут еще можно дать ей имя стандартного log, но тогда в логе будет слишком много мусора

--upd

 

 

 

Второй вариант приветствуется(имхо, пространство имен package как раз для этого), но если будут конкретные вопросы\пожелания\идеи то скорей всего сделаю все что в моих силах

Изменено пользователем RvP

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

RvP

1. Вполне годится и '_gsc', главное уйти от довольно двусмысленного '_old'.

3. В редакторе подсветку каждый сам себе может править, да и у каждого 'свой' редактор ....

А вот то, что именно и подсвечивается 'не своим' цветом и напоминает о математическом методе, а не консольном - несколько сбивает.

Так как ты и говоришь - так и использую сейчас, но сторонник давать имена функциям/методам/переменным по принадлежности к функционалу а не ... с потолка. Проходит время - и начинаешь вспоминать, что ж означает данное обозначение, оторванное от контекста. :-)

Имя стандартного 'log' - тоже не считаю удачным, но по аналогии с 'printf' и аналогичными - 'logf' (ИМХО) вполне и узнаваем и понятен.

 

Ну и ... не знаю, востребованы ли string.trim_r или string.trim_l, а вот string.trim_w (чистка и усечение по первому слову) будет более востребован.

Изменено пользователем Artos

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

Ссылка на комментарий

Artos,

1. Как нибудь переделаю.

3. log тоже математическая функция) тут дело вкуса, не более, каждый сам себе делает как ему нравиться

 

про string.trim_w что то не пойму как он должен работать и чем он должен отличаться

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

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

Что-то типа:

return string.match(str, '^%s*(%S*)') --/ trim_w

в отличии от обычного трима:

return string:match(str, '^%s*(.*%S)') --/ trim

Изменено пользователем Artos

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

Ссылка на комментарий
...Что-то типа:
return string.match(str, '^%s*(%S*)')

Первое слово наверное лучше искать так :

return str:match('%S+')

match сам по себе уже ищет первое вхождение

%S исключает пробелы

+ укажет на первый "не пробел" и максимальное продолжение "не пробелов", т.е. на первое слово

Изменено пользователем Gun12
Ссылка на комментарий

Gun12, ты полностью прав, поэтому и написал 'типа этого' ... а я осталял себе как напоминалку, т.к. могла возникнуть потребность фильтровать еще и '\160' ...

Кстати, твой вариант на ~30% быстрее упомянутого мною. :-)

Изменено пользователем Artos

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

Ссылка на комментарий
1. Переименовывать исходную библиотеку не с суффиксом '_old', а с чем-то более нейтральным, например '_src'. У многих 'old/bak' ассоциируется с ненужным мусором, да и чистильщики дисков порой имеют в настройках ткакие маски. Т.о. можно ненароком удалить необходимое.
1. Был вариант с суффиксом "_GSC", возможно вернусь к нему.
1. Вполне годится и '_gsc', главное уйти от довольно двусмысленного '_old'.

Это, не означает, что прежняя библиотека то-же будет продолжать использоваться (под новым именем)?

 

2. Уточнить в реадме, что версия 1.0000-1.0003 и для 1.0006 предназначается.

То-есть, для версии 1.0006, я могу попробовать версию для 1.0000-1.0003?

Изменено пользователем 7.9

всё легко

Ссылка на комментарий
7.9, оригинальная библиотека все равно используется в полном объеме, и без нее ничего работать не будет

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

7.9

1. Означает именно то, что прежняя библиотека ПРОДОЛЖАЕТ использоваться под новым именем, а не становится рудиментом. Без нее (под новым заданным именем) работа невозможна. По сути новая dll-ка - это надстройка, в которую добавлен дополнительный функционал, через которую вызываются штатные библиотеки Lua5.1 и транслируются запросы в прежнюю библиотеку из исходной игры.

2. Да, именно не попробовать, а использовать. Иного варианта нет.

Изменено пользователем Artos

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

Ссылка на комментарий

Понято:

прежнюю библиотеку оставляем, называем как написано;

для 6 патча используем то, что для 1-3;

правленый xrGame.dll - видимо - проблемой не будет.

(просьба поправить если что-то не так, если всё так - ничего не говорите; извиняюсь, что переспрашиваю)

Изменено пользователем 7.9

всё легко

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...