Dennis_Chikin 3 665 Опубликовано 4 Января 2015 Поделиться Опубликовано 4 Января 2015 (изменено) С чего начинать и где взять. Установка 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 Изменено 2 Марта 2015 пользователем Kirgudu Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-905371
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 7.9, открыть диспетчер задач не судьба? Луа не многопоточен в принцыпе, так как один стек и виртуальная машина Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642009
7.9 174 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Про Lua понял. Про диспетчер: У меня процессор с двумя ядрами, с двумя - вроде, чего-то там работает, но что именно - понять сложно. Изменено 7 Ноября 2011 пользователем 7.9 всё легко Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642024
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, например? Некорректно выразилась. Имелась ввиду основа связки С++ - ЛУА: экспорт функций, классов из С++ в ЛУА. Я просто привыкла к этому, на этом можно всяческие трюки сделать (включая работу с памятью, потоками и прочими интересными штуками). Здесь же, в сталкере, приходится иметь дело "с тем, что есть". Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642035
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, на данный момент в луа можно биндить любые свои функции и классы. Дальше ограничено только фантазией)) Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642048
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Да вы что? То, что не предусмотрено движком, через корявые дллки? Если да, то извините, но это рядом не валялось с написанием нормальной системы классов и их биндингом. У меня фантазия отказывает, бедная она у меня, походу. Или, может, расширение классов, описанных разработчиками? Тогда, конечно, это круто. [offtopic] Подпирать сталкер костылями - палеатив, на мой взгляд. С такими усилиями, сколько комьюнити вложило в это решето, давно можно было свою собственную игру написать. [/offtopic] Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642056
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, биндинг через сам луа и луабинд, точно такой же как и у компания-разработчик (признана нежелательной)* был. Что мешает писать "нормальную систему классов" так и вообще не понятно... Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642062
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Ок, я поняла точку зрения Вопрос был не в том КАК, а в том ЧТО. Если новое - то это реально бред, простите. Пишите новую игру лучше, это куда креативнее и интереснее, имхо, конечно же. И да, не забудьте это привязать к игровой логике сталка, или тоже пишем свою? Тогда что от сталкера остается? Обкладывать сталкер дллками - палеатив, как я сказала. Да и вообще, такие таланты надо вкладывать не в чужое творение за бесплатно, а в свое и за деньги. Или я не улавливаю основную мысль? Сделать вообще возможно все, но вот есть ли в этом смысл... Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642070
Malandrinus 615 Опубликовано 7 Ноября 2011 Автор Поделиться Опубликовано 7 Ноября 2011 RvP, Что мешает писать "нормальную систему классов" так и вообще не понятно... В первом приближении, мешает отсутствие у тебя этих самых классов. Впрочем, если сможешь это сделать, было бы действительно замечательно. То, как делаются расширения сейчас, иначе как мазохизмом не назвать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-642071
Real Wolf 34 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 Можно ли узнать в функции откуда она была вызвана? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-643100
RvP 1 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 Real Wolf, print(debug.traceback()) Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-643105
*Shoker* 322 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 (изменено) Знаю что это из ряда фантастики, но штатными методами LUA можно ли "выключить" весь скрипт или функцию? Тоесть допустим у меня скрипт с рядом функций, которые из разных мест вызываются переодически. Могу ли я тупо "остановить" их. Тоесть чтобы если функцию вызовет какой то скрипт, игра не вылетела, но и функция не выполнилась? Насколько я понял, все скрипты при компиляции заносятся в некую таблицу, к которой можно получить доступ из _G. Все функции из этого скрипта я вызываю с проверкой вида if _G[script] and _G[script][funct] then, если я обнилю _G[script] = nil, это будет критично для движка? Ну и раз так, то обратный вопрос, можно ли прямо во время игры "собрать" свой собственный скрипт через _G? А вообще возможно составить функцию на лету? Тоесть скриптво в формате string сделать функцию и скормить компилятору, чтобы он её превротил в нормальную? Изменено 15 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644294
RvP 1 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 *Shoker*, А вообще возможно составить функцию на лету? Тоесть скриптво в формате string сделать функцию и скормить компилятору, чтобы он её превротил в нормальную? load (func [, chunkname]) loadfile ([filename]) loadstring (string [, chunkname]) оно? Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644344
*Shoker* 322 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 Возможно Надеюсь что оно уже экспортировано в ЧН/ЗП (как я понял твоя библитоека тока для ТЧ годится) А вообще я lUA на сталкере учил, поэтому многих спец. функций его даже не знаю, с load-ами никогда не работал, хотя на lua-help читал что то давно про них, но все эти чанки и прочее, я даже не пойму что это. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644357
xStream 86 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 (изменено) Это стандартные функции ЛУА. Чанк - ссылка на скомпилированый байт-код. По сути - это нечто типа функции, внутри которой весь твой код рабочий и сохраняется (образно говоря). Чанки можно выполнять как функции, в результате чего произойдет "загрузка заново" (переинициализация всего, что было внутри чанка - переменных и функций). Изменено 15 Ноября 2011 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644369
Nazgool 251 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 (изменено) ...штатными методами LUA можно ли "выключить" весь скрипт или функцию?Проще всего с помощью debug. Я раньше уже показывал, но повторю. Напиши где-нибудь в _g.script(конечно если используешь расширение от RvP): debug.setmetatable(nil, {__index = function() end, __call = function() end}) А дальше, если нужно выключить отдельную функцию, или весь модуль, просто присвой им значение nil: имя_модуля.имя_функции = nil -- отключаем функцию -- или имя_модуля = nil -- отключаем модуль целиком Все вызовы таких функций, или же модуля в целом будут возвращать nil, а не вылетать. Но тут есть ещё вопросы. Нужна ли возможность обратного включения? Сохранять ли состояние (включен\выключен)? Ну, в общем, ещё немало нюансов для создания полноценного функционала. Добавлено через 159 мин.: Полагаю что ты мало что понял из объяснений по load-ам, поэтому несколько примеров : -- чанк как строка local s = 'function foo() print "Hy" end' -- исходный чанк loadstring(s)() -- загрузить чанк foo() -- выполнить -- или такой вариант : local s = 'n = 10' loadstring(s)() print(n) -- Массив чанков, через load : function getcode (t) local pos = 0 local function iterator () pos = pos + 1 return t [pos] end return iterator end code = {"local a = 1 ", "print ('a =', a) "} load (getcode (code)) () -- чанк как байт-код function foo() -- исходная функция print "Hy" end local f=string.dump(foo) -- cохранить функцию в байт-код local new_foo = loadstring(f) -- загрузить функцию new_foo() -- выполнить функцию Изменено 15 Ноября 2011 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644402
Artos 99 Опубликовано 16 Ноября 2011 Поделиться Опубликовано 16 Ноября 2011 (изменено) *Shoker*: Знаю что это из ряда фантастики, но штатными методами LUA можно ли "выключить" весь скрипт или функцию? Тоесть допустим у меня скрипт с рядом функций, которые из разных мест вызываются переодически. Могу ли я тупо "остановить" их. Тоесть чтобы если функцию вызовет какой то скрипт, игра не вылетела, но и функция не выполнилась? (выскажу свое ИМХО) Никакая это не фантастика, а рядовое использование обычных (но редко используемых) приемов программирования. 1. Функции, в Lua - один из типов информации, с которыми возможны большинство стандартных операций, т.е. присвоения, занИления, сохранения в таблицах и пр. 2. Если ты, как сам пишешь, используешь обращение к метатаблице - то что мешает в это поле в нужное время подставить нужную функцию (хоть ничего не возвращающую), а прежнюю, если потребно, запомнить в другом поле/месте (чтобы иметь возможность восстановить)? 3. Аналогично и со 'скриптами' (если под ними понимаем файл-скрипт). Обращаясь не к нему (файлу) непосредственно, а именно через метатаблицу (_G), ничто не мешает как угодно заменить на нужное _G[script]. Т.е. по сути подменять один скрипт другим. Примеров даже в имеющихся модах предостаточно. 4. Ну а чтобы не вылетело - все зависит от того, что обжидает в ответ вызвавшая функция и как обрабатывает полученный ответ. Ничто не мешает перед вызовом перепроверять и наличие собственно скрипта и/или функции в нем, и конечно же по полученному ответу не форсировать операций с неполученными 'штатно' параметрами. Составлять же функцию 'на лету' - и Gun12 дал пояснение и ... А ЗАЧЕМ? Все одно, составленная таким образом функция должна быть подчинена некоему алгоритму и соответствовать некоему шаблону. Т.о. заложив шаблон или даже готовый набор возможных вариантов и выбирая из него нужное - вполне безопасно можно подстраиваться под нужное. Пример имеется даже для прекондишенов в диалогах (см. AMK-mod), в котоором рандомятся условия и по ним в собственно скрипт добавляются требуемые функции. А вообще взглянул бы ты на известный тебе мод, в котором давным давно и модули/скрипты опциональны и отключаемы 'на лету' и функции 'на лету' добавляются/заменяются хоть в _G, хоть в иных скриптах. Т.о. никакая это не фантастика, а вполне тривиальные вещи, способ реализации которых зависит от конкретного контекста. Изменено 16 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-644520
alpet 77 Опубликовано 18 Ноября 2011 Поделиться Опубликовано 18 Ноября 2011 (изменено) Обкладывать сталкер дллками - палеатив, как я сказала. Спорное это утверждение. Много-ли потенциала можно из движка ТЧ извлечь, не забираясь глубоко в его внутреннее устройство? Далеко можно зайти с оптимизацией, особенно если захочется задействовать дополнительные ядра ЦП? Без своей разработки я пока не вижу способов такие вещи делать: 1. Прямой доступ к свойствам объектов игры, позволяющий буквально все изменять на лету, регулировать некоторые источники света в том числе. Полезная инфа из объектов на раз извлекается: в инвентори он лежит или в слоте например. 2. Вызов методов внутренних C++ классов, раскрывающий возможности опять-же недоступные обычно на уровне Lua. 3. В случае с 65535 ID, получение только существующих из онлайнового или серверного двоичного дерева, за считанные микросекунды вместо перебора. В том числе с фильтрами по владельцу, координатам и т. п. Что к слову позволяет самой DLL наблюдать за состояниями объектов и при необходимости колбеки вызывать, а перехват лога (в версии 1.0006) позволяет синхронизировать версии деревьев. 4. Элементарный перехват клавиатуры. В будущем вероятно удастся даже записывать новые текстуры в память, и корректировать вертексы в буфере DX9. Вряд-ли это позволит движку стать более современным, но пока я оцениваю мир зоны все более и более перестает быть "пластмассовым" и статичным. Изменено 18 Ноября 2011 пользователем alpet Плавайте поездами аэрофлота! Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-645097
xStream 86 Опубликовано 18 Ноября 2011 Поделиться Опубликовано 18 Ноября 2011 (изменено) Речь шла не о доступе к тому, что уже заложено в движке, а о новом функционале, причем экспортируемом в луа. Это существенно разные вещи. Заняться реверсинжинирингом и дополнить существующее - бесспорно важно и полезно. Я тут даже и не спорю *тут должен быть смайл уважительного поклона* Изменено 18 Ноября 2011 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-645106
*Shoker* 322 Опубликовано 29 Ноября 2011 Поделиться Опубликовано 29 Ноября 2011 А в LUA случаем нету "меток" и возможности переходить между ними? Тоесть есть кусок кода, его можно "отметить" и в нужный момент перескочить именно на него. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-648355
Старлей 88 Опубликовано 29 Ноября 2011 Поделиться Опубликовано 29 Ноября 2011 Может быть эти кусочки объявить как локальные переменные вот как и будет вроде переход... Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/7/#findComment-648366
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти