Dennis_Chikin 3 658 Опубликовано 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 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 7.9, открыть диспетчер задач не судьба? Луа не многопоточен в принцыпе, так как один стек и виртуальная машина Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
7.9 174 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) Про Lua понял. Про диспетчер: У меня процессор с двумя ядрами, с двумя - вроде, чего-то там работает, но что именно - понять сложно. Изменено 7 Ноября 2011 пользователем 7.9 всё легко Ссылка на комментарий
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, например? Некорректно выразилась. Имелась ввиду основа связки С++ - ЛУА: экспорт функций, классов из С++ в ЛУА. Я просто привыкла к этому, на этом можно всяческие трюки сделать (включая работу с памятью, потоками и прочими интересными штуками). Здесь же, в сталкере, приходится иметь дело "с тем, что есть". Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, на данный момент в луа можно биндить любые свои функции и классы. Дальше ограничено только фантазией)) Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Да вы что? То, что не предусмотрено движком, через корявые дллки? Если да, то извините, но это рядом не валялось с написанием нормальной системы классов и их биндингом. У меня фантазия отказывает, бедная она у меня, походу. Или, может, расширение классов, описанных разработчиками? Тогда, конечно, это круто. [offtopic] Подпирать сталкер костылями - палеатив, на мой взгляд. С такими усилиями, сколько комьюнити вложило в это решето, давно можно было свою собственную игру написать. [/offtopic] Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
RvP 1 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 xStream, биндинг через сам луа и луабинд, точно такой же как и у GSC был. Что мешает писать "нормальную систему классов" так и вообще не понятно... Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
xStream 86 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 Ок, я поняла точку зрения Вопрос был не в том КАК, а в том ЧТО. Если новое - то это реально бред, простите. Пишите новую игру лучше, это куда креативнее и интереснее, имхо, конечно же. И да, не забудьте это привязать к игровой логике сталка, или тоже пишем свою? Тогда что от сталкера остается? Обкладывать сталкер дллками - палеатив, как я сказала. Да и вообще, такие таланты надо вкладывать не в чужое творение за бесплатно, а в свое и за деньги. Или я не улавливаю основную мысль? Сделать вообще возможно все, но вот есть ли в этом смысл... Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
Malandrinus 615 Опубликовано 7 Ноября 2011 Автор Поделиться Опубликовано 7 Ноября 2011 RvP, Что мешает писать "нормальную систему классов" так и вообще не понятно... В первом приближении, мешает отсутствие у тебя этих самых классов. Впрочем, если сможешь это сделать, было бы действительно замечательно. То, как делаются расширения сейчас, иначе как мазохизмом не назвать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Real Wolf 34 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 Можно ли узнать в функции откуда она была вызвана? Ссылка на комментарий
RvP 1 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 Real Wolf, print(debug.traceback()) Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
*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, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
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 Ссылка на комментарий
*Shoker* 322 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 Возможно Надеюсь что оно уже экспортировано в ЧН/ЗП (как я понял твоя библитоека тока для ТЧ годится) А вообще я lUA на сталкере учил, поэтому многих спец. функций его даже не знаю, с load-ами никогда не работал, хотя на lua-help читал что то давно про них, но все эти чанки и прочее, я даже не пойму что это. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
xStream 86 Опубликовано 15 Ноября 2011 Поделиться Опубликовано 15 Ноября 2011 (изменено) Это стандартные функции ЛУА. Чанк - ссылка на скомпилированый байт-код. По сути - это нечто типа функции, внутри которой весь твой код рабочий и сохраняется (образно говоря). Чанки можно выполнять как функции, в результате чего произойдет "загрузка заново" (переинициализация всего, что было внутри чанка - переменных и функций). Изменено 15 Ноября 2011 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
Nazgool 250 Опубликовано 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 Ссылка на комментарий
Artos 99 Опубликовано 16 Ноября 2011 Поделиться Опубликовано 16 Ноября 2011 (изменено) *Shoker*: Знаю что это из ряда фантастики, но штатными методами LUA можно ли "выключить" весь скрипт или функцию? Тоесть допустим у меня скрипт с рядом функций, которые из разных мест вызываются переодически. Могу ли я тупо "остановить" их. Тоесть чтобы если функцию вызовет какой то скрипт, игра не вылетела, но и функция не выполнилась? (выскажу свое ИМХО) Никакая это не фантастика, а рядовое использование обычных (но редко используемых) приемов программирования. 1. Функции, в Lua - один из типов информации, с которыми возможны большинство стандартных операций, т.е. присвоения, занИления, сохранения в таблицах и пр. 2. Если ты, как сам пишешь, используешь обращение к метатаблице - то что мешает в это поле в нужное время подставить нужную функцию (хоть ничего не возвращающую), а прежнюю, если потребно, запомнить в другом поле/месте (чтобы иметь возможность восстановить)? 3. Аналогично и со 'скриптами' (если под ними понимаем файл-скрипт). Обращаясь не к нему (файлу) непосредственно, а именно через метатаблицу (_G), ничто не мешает как угодно заменить на нужное _G[script]. Т.е. по сути подменять один скрипт другим. Примеров даже в имеющихся модах предостаточно. 4. Ну а чтобы не вылетело - все зависит от того, что обжидает в ответ вызвавшая функция и как обрабатывает полученный ответ. Ничто не мешает перед вызовом перепроверять и наличие собственно скрипта и/или функции в нем, и конечно же по полученному ответу не форсировать операций с неполученными 'штатно' параметрами. Составлять же функцию 'на лету' - и Gun12 дал пояснение и ... А ЗАЧЕМ? Все одно, составленная таким образом функция должна быть подчинена некоему алгоритму и соответствовать некоему шаблону. Т.о. заложив шаблон или даже готовый набор возможных вариантов и выбирая из него нужное - вполне безопасно можно подстраиваться под нужное. Пример имеется даже для прекондишенов в диалогах (см. AMK-mod), в котоором рандомятся условия и по ним в собственно скрипт добавляются требуемые функции. А вообще взглянул бы ты на известный тебе мод, в котором давным давно и модули/скрипты опциональны и отключаемы 'на лету' и функции 'на лету' добавляются/заменяются хоть в _G, хоть в иных скриптах. Т.о. никакая это не фантастика, а вполне тривиальные вещи, способ реализации которых зависит от конкретного контекста. Изменено 16 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
alpet 77 Опубликовано 18 Ноября 2011 Поделиться Опубликовано 18 Ноября 2011 (изменено) Обкладывать сталкер дллками - палеатив, как я сказала. Спорное это утверждение. Много-ли потенциала можно из движка ТЧ извлечь, не забираясь глубоко в его внутреннее устройство? Далеко можно зайти с оптимизацией, особенно если захочется задействовать дополнительные ядра ЦП? Без своей разработки я пока не вижу способов такие вещи делать: 1. Прямой доступ к свойствам объектов игры, позволяющий буквально все изменять на лету, регулировать некоторые источники света в том числе. Полезная инфа из объектов на раз извлекается: в инвентори он лежит или в слоте например. 2. Вызов методов внутренних C++ классов, раскрывающий возможности опять-же недоступные обычно на уровне Lua. 3. В случае с 65535 ID, получение только существующих из онлайнового или серверного двоичного дерева, за считанные микросекунды вместо перебора. В том числе с фильтрами по владельцу, координатам и т. п. Что к слову позволяет самой DLL наблюдать за состояниями объектов и при необходимости колбеки вызывать, а перехват лога (в версии 1.0006) позволяет синхронизировать версии деревьев. 4. Элементарный перехват клавиатуры. В будущем вероятно удастся даже записывать новые текстуры в память, и корректировать вертексы в буфере DX9. Вряд-ли это позволит движку стать более современным, но пока я оцениваю мир зоны все более и более перестает быть "пластмассовым" и статичным. Изменено 18 Ноября 2011 пользователем alpet Плавайте поездами аэрофлота! Ссылка на комментарий
xStream 86 Опубликовано 18 Ноября 2011 Поделиться Опубликовано 18 Ноября 2011 (изменено) Речь шла не о доступе к тому, что уже заложено в движке, а о новом функционале, причем экспортируемом в луа. Это существенно разные вещи. Заняться реверсинжинирингом и дополнить существующее - бесспорно важно и полезно. Я тут даже и не спорю *тут должен быть смайл уважительного поклона* Изменено 18 Ноября 2011 пользователем xStream Все, кто стоит на моем пути: идите нахрен и там погибните! © Ссылка на комментарий
*Shoker* 322 Опубликовано 29 Ноября 2011 Поделиться Опубликовано 29 Ноября 2011 А в LUA случаем нету "меток" и возможности переходить между ними? Тоесть есть кусок кода, его можно "отметить" и в нужный момент перескочить именно на него. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Старлей 88 Опубликовано 29 Ноября 2011 Поделиться Опубликовано 29 Ноября 2011 Может быть эти кусочки объявить как локальные переменные вот как и будет вроде переход... Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти