Kirgudu 1 255 Опубликовано 22 Августа 2015 (изменено) Давно пора. Внесу свои (чужие, конечно) 5 копеек в виде подборки модулей Артоса (все - последних опубликованных автором версий) и одного от xStream - на случай, если у автора темы какого-то из них нет. После принятия к сведению пост можно потереть. @Artos: Ссылки на устаревшие версии модулей Artos'а удалены. Актуальные версии (с исправлением найденных ошибок) опубликованы в этом посте. @xStream: xs_sandbox - система событий, «песочница» по терминологии автора. Все модули мультиплатформенные, инструкция вложена в каждый архив. @Dennis_Chikin, здесь, на мой взгляд, допустимо обсуждение самих готовых модулей, вопросов их использования и т. п. О подключении модуля se_stor к ЗП: Начиная отсюда, несколько следующих постов. Zander. Изменено 10 Августа 2016 пользователем Kirgudu 1 1 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 26 Октября 2015 Навеяно помощью @Romz по прикручиванию se_stor к ЗП, результатом чего стал его объединённый комплект скриптов. Он всем хорош, однако, во-первых, предназначен только для ЗП, а во-вторых, предлагает подключение, например, m_timers даже в том случае, если таймеры не нужны, а нужно только универсальное хранилище. Здесь я хочу выложить немного другой комплект модулей @Artos'a, содержащий не все модули сразу, а каждый модуль по отдельности. При этом: реализована полная совместимость модулей между собой (можно интегрировать их в мод в любых необходимых сочетаниях); подключение и работа всех модулей протестированы во всех частях игры; для модуля универсального хранилища (se_stor) добавлено 3 разных примера подключения - для ТЧ, ЧН и ЗП соответственно. Примеры эти 100% рабочие, не требуют никакой доработки напильником. Достаточно в нужных местах добавить/закомментировать указанные куски кода. модуль se_stor доработан так, что теперь он позволяет не только сохранять в чанках те внешние модули, у которых есть публичные методы save/load, но и указывать кастомные названия соответствующих методов. Таким образом, теперь можно больше данных, сохраняемых в оригинале в нет-пакете главного героя, перенести в универсальное хранилище. В добавленных примерах подключения это отражено. Состав: lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами. m_netpk - интерфейс чтения/записи net-пакетов. m_timers - менеджер универсальных таймеров. se_stor - универсальное хранилище данных произвольного размера. Комплект мультиплатформенных модулей для S.T.A.L.K.E.R. SoC/CS/CoP Автор: @Artos (+ по рекурсии те авторы, работы которых Artos использовал, см. readme к соотв. модулям) Доработка модулей и синхронизация их между собой: @Kirgudu Исправление найденных в некоторых модулях ошибок: @Charsi, @Kirgudu, @naxac, @dsh, ... Состав: lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами. m_netpk - интерфейс чтения/записи net-пакетов. m_timers - менеджер универсальных таймеров. se_stor - универсальное хранилище данных произвольного размера. Добавляемые в оригинальные файлы игры фрагменты кода, а также наименования некоторых внутренних функций модулей, используемых в других местах, приведены к единому стандарту. Таким образом, подключать модули можно по отдельности или в любых сочетаниях, необходимых в конкретном случае, без опасений насчёт совместимости. Подключение всех модулей и их работа проверены мной во всех частях игры. В общий сборник включён использовавшийся для этого дополнительный скрипт (test_modules.script). Для разового тестирования можно добавить его вызов, например, на кнопку меню или при первом апдейте актора. Пример (первый апдейт актора, проверка подключения всех четырёх модулей), bind_stalker.script: function actor_binder:update(delta) --/ ... все строки функции if not test_modules_executed and test_modules and type(test_modules.execute) == 'function' and device().precache_frame < 2 then test_modules.execute("lua_helper", "m_netpk", "se_stor", "m_timers") test_modules_executed = true end end Результат в логе, если все модули подключены правильно: test_modules::>[lua_helper]_success! test_modules::>[lua_extension]_success! test_modules::>[m_netpk]_success! test_modules::>[se_stor]_success! test_modules::>[m_timers]_success! lua_helper - https://yadi.sk/d/1_J1HVZsu7Jgy, обновлено 08.02.2025 m_netpk - https://yadi.sk/d/GtYsSbjnxqdtp, обновлено 08.02.2025 se_stor - https://yadi.sk/d/a38PlQdju7Jhr, обновлено 10.08.2016 m_timers - https://yadi.sk/d/FWJkTnAMu7Jhg, обновлено 08.02.2025 Общий комплект + скрипт для тестирования - https://yadi.sk/d/p69RQkBMu7JgR, обновлено 08.02.2025 6 8 9 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 10 Ноября 2015 (изменено) Обнаружена и исправлена критическая ошибка в модуле универсального хранилища se_stor, приводившая к периодической невозможности сохранить в чанках данные всех подключённых внешних модулей. Ссылки те же (обновлены комплект se_stor и общий комплект). За помощь в тестировании спасибо @Romz. Изменено 10 Ноября 2015 пользователем Kirgudu 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 18 Ноября 2015 (изменено) @Zander_driver, если чувствуется, что это может кому-нибудь пригодиться, почему бы и нет? Хотя могут и помидорами закидать... Раз уж так вышло, что я недавно взял на себя посильную доводку модулей Артоса, позволю себе слегка прокомментировать обновлённую шапку. Установка модулей Artos`a на ЗПТут не просто установка модулей на ЗП, а, во-первых, сами модули (самая свежая их версия, с исправленными ошибками), во-вторых, модули полностью адаптированы ко всем платформам (естественно, для чистой игры) и в-третьих, некоторые кроссмодульные функции приведены к единому стилю, то есть сочетать модули между собой можно как угодно. Следует рекомендовать их скачивать именно из этого поста. Модули Артоса и xStreamА вот тут как раз лежат устаревшие модули Артоса, с одной стороны более приближённые к оригиналу автора, но с другой - с ошибками. Именно поэтому я бы их не рекомендовал, если кто-то не готов доработать самостоятельно. комплект скриптов и инструкций se_stor от 09.09.2013, lua_helper, m_timers от 23.09.2013 и lua_extension от 29.09.2013, для чистой ЗПВ этом общем комплекте от @Romz также использовался устаревший se_stor, неправильно работающий с чанками на платформах ЧН/ЗП. Старичок m_net_utilsДля своего времени штука была хорошая, но сейчас уже сильно устарела, да и не без ошибок. Разве только кому-то позарез нужна именно старая версия... Изменено 19 Ноября 2015 пользователем Kirgudu 2 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 10 Августа 2016 Обновил комплект модулей Artos'а в этом посте - было найдено и исправлено несколько ошибок в модулях lua_helper и m_timers. @Zander_driver, просьба обновить шапку. Во время заливки я обнаружил, что модули Артоса качают в основном из поста, на который ведёт ссылка «Модули Артоса и xStream». Но они там заведомо содержат ошибки, которые уже были исправлены позднее! Из того поста можно брать только xs_sandbox от xStream.Под модули Артоса нужно сделать новую ссылку, ведущую на вышеуказанный пост.А ссылка «Установка модулей Artos`a на ЗП» должна вести не на этот же пост, а напрямую в соответствующую часть темы «скриптование». Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 22 Августа 2016 @naxac, спасибо. Какая из версий скрипта, выложенных Artos'ом (либо кем-то ещё позднее) послужила основой? Интересуюсь с целью интеграции исправлений в свой комплект "на все случаи жизни". По сравнению с тем, что есть у меня, изменений довольно много и не всегда очевидно, что они связаны именно с вышеперечисленными исправлениями. Заметил, кстати, что твой вариант требует реализации в каком-либо виде функции table.size() (например, путём подключения Artos'овского же модуля lua_extension), поскольку в скачиваемом скрипте она отсутствует. Тем, кто "в теме" всё равно, а остальным следует об этом знать. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 25 Сентября 2016 (изменено) @dsh, или так: str = string.trim( str:gsub(";.-\n", "\n") )Спасибо, взял себе и обновил свою выкладку в этой теме (ссылки те же). Изменено 25 Сентября 2016 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 18 Октября 2016 Было бы неплохо многообразие Артосо-модулей со всевозможными правками и дополнениями от разных авторов привести к некоему единому массиву полезностей... В моей подборке модулей Артоса учтены все исправления, когда-либо сделанные разными участниками, кроме тех, что выложил @naxac в этом посте. Всё никак руки не дойдут до интеграции и проверки. Очень надеюсь, что получится заняться этим в ближайшем будущем. Возможно, если б кто-нибудь независимый подтвердил, что правки @naxac работают так, как ожидается, и они действительно нужны - это ускорило бы объединение. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 19 Октября 2016 (изменено) Обновил подборку модулей @Artos'а в этом посте (третья по счёту ссылка в текущей шапке). Изменению подвергся модуль m_netpk - интегрированы следующие правки от @naxac: - исправлен разбор num_items и чтение некоторых параметров update-части пакета объектов, наследованных от cse_alife_inventory_item; - исправлено чтение update-части в net_cse_alife_item_weapon_magazined_w_gl; Работу с кубическими шейпами с помощью векторов переделывать на матрицы не стал - пусть в этой части модуль останется таким, каким его задумывал автор. Текущий способ задания шейпов может использоваться уже во многих модах, и если его менять, можно потерять в совместимости. Также не стал брать кое-какие частные исправления, предназначенные для работы с внешними amk-скриптами. Правки других авторов, проскальзывавшие в этой или других темах в разное время, взяты в полной мере. Изменено 19 Октября 2016 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 20 Октября 2016 @UnLoaded, только скриптовые в составе модуля lua_helper. В описании всё есть. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 30 Октября 2016 @dsh, вот точно помню, что исправлял! Аккурат тогда, когда прочёл сообщение об этой ошибке. Видимо, исправление «потерялось» во время интеграции правок от naxac. Спасибо, что сообщил, обновил выложенные сборки. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 10 Мая 2017 (изменено) @Graff46, мнения расходятся.Лично я пользуюсь модулем, выложенным в этом посте - это последняя версия, опубликованная Артосом, для неё форумчанами также были сделаны исправления ряда найденных ошибок.Если не ошибаюсь, данный модуль также получил некоторое развитие в каком-то из модов, одним из авторов которого является @naxac, но какие там были сделаны добавки, общие или частные, нужно спрашивать у него.С другой стороны, насколько мне известно, автор данной темы @Zander_driver по некоторым причинам пользуется более старой версией модуля.ИМХО, стоит начать с m_netpk, а уж если что-то не устроит - переходить на иное. Изменено 10 Мая 2017 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 10 Мая 2017 @Graff46, m_netpk всё-таки наиболее современный, в нём самим Артосом было исправлено много ошибок и сделано много доработок по сравнению с m_net_utils. Повторюсь, если уж начинать, то с него. ИМХО, конечно.Скрипт xStream не щупал, про его плюсы и минусы ничего сказать не могу. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 10 Мая 2017 (изменено) @dsh, так это всё тогда совместно обсуждалось и разрабатывалось. Согласен, не исключено что xStream была своего рода первопроходцем. Не в курсе деталей, но по истории форума при желании проследить, думаю, можно. Кстати, если ты иногда захочешь в custom data писать данные не в формате ini что имеешь в виду? Запись/чтение голой строки "as is", без внутреннего парсинга с попутной потерей неканонических данных? Если есть необходимость, такой форсированный режим добавить не сложно. Изменено 10 Мая 2017 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 11 Мая 2017 @Graff46, а вот это как раз и есть формат ini, который m_netpk понимает и парсит для тебя в таблицу при чтении нет-пакета. Update: Хотел было по-быстрому добавить в m_netpk поддержку произвольной строки, но, заглянув в скрипт, понял, что это не обязательно.В конфиге m_netpk.ltx есть такой параметр: disable_convert_custom_data = false ;--/ отключить конвертирование 'custom_data' из строки в таблицу (и обратно) Если поставить здесь true - кастом дата всегда будет представлена только в виде строки. И если уж конкретный скриптёр знает, зачем писать туда данные не в формате ini, ему не составит труда оперировать строками в том числе и для канонических данных. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 11 Мая 2017 (изменено) @dsh, могут появиться проблемы с внутренним пониманием данных. При глобально включённом парсинге кастом дата хранится в таблице. Допустим, сырую строку, заданную методом setStringRaw, можно записывать в отдельное свойство. А как писать в нет-пакет? Приоритет сырой строки или таблицы? Или конкатенация того и другого? Обратная ситуация с чтением из нет-пакета строки. По каким критериям модуль должен решить, что парсить в таблицу, а что оставить в виде строки (если вообще что-то следует оставлять)? ЗЫ: Не переместиться ли нам вместе с несколькими вышенаписанными постами в "скриптование"? Рабочее предложение такое: При чтении из нет-пакета (при глобально включённом парсинге) кастом дата всегда пишется как в таблицу, так и, полной неизменной строкой, в дополнительное свойство. Метод getStringRaw (или прямой обращение к доп. свойству, скажем ) в таком случае будет возвращать полную строку, а метод getString - строку, полученную из таблицы. При штатной записи в нет-пакет будет попадать строка, также полученная из таблицы. Таким образом, работа с нет-пакетом пользователей, привыкших к старой версии модуля, не изменится. Если ты хочешь записать в кастом дату что-то особенное, используешь метод setStringRaw - в доп. свойство попадает нужная тебе строка, одновременно устанавливается флаг. При записи нет-пакета и наличии этого флага таблица будет игнорироваться, а строка будет писаться из доп. свойства.Этот же флаг можно взводить вручную для конкретного пакета (например, ещё одним добавленным методом useStringRaw), если кастом дату ты изменять не собираешься, но знаешь, что там могут быть нетипичные данные. Но делать это надо будет при каждом изменении такого нет-пакета и это будет на совести скриптёра. Иначе - в нет-пакет опять пойдет строка, полученная из таблицы. Какие будут мнения? Изменено 11 Мая 2017 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 11 Мая 2017 (изменено) @dsh, накидал версию для теста: http://rgho.st/8mRrl2nnz Конфиг не менялся, здесь только скрипт. Сам проверить не могу, если только в неопределённом будущем. Спецификации такие (примем local cd = data.custom_data в уже прочтённом нет-пакете): cd:setTable(tbl) - таблицу записывает в свойство-таблицу как и раньше; генерирует строку по этой таблице (сырая строка перезаписывается) и записывает в новое свойство; устанавливает приоритет записи по таблице. cd:setString(str) - парсит строку в таблицу и записывает в привычное свойство-таблицу как и раньше; записывает эту же строку в новое свойство как есть; устанавливает приоритет записи по таблице. cd:setStringRaw(str) - таблицу не трогает; записывает строку в новое свойство как есть; устанавливает приоритет записи по сырой строке. cd:getTable() - возвращает таблицу из свойства-таблицы как и раньше.cd:getString() - возвращает генерированную строку из свойства-таблицы как и раньше; cd:getStringRaw() - возвращает текущую сырую строку из нового свойства; cd:useStringRaw(mode) - если mode имеет значение типа boolean - принудительно устанавливает режим приоритета сырой строки (true) или таблицы (false), в противном случае просто возвращает текущий режим. ИМХО, все необходимые случаи учтены. Сразу после прочтения нет-пакета имеем как нормализованную таблицу, так и сырую строку, содержащую в том числе нетипичные данные. Если хотим работать с форматом ini - используем старые методы, они в этом плане не поменялись. Если хотим работать с сырой строкой - используем новые. Установка кастом даты одним из старых методов автоматически перезаписывает сырую строку с целью её нормализации (и чтобы не мучиться с соединением разных типов) и устанавливает приоритет ini. Установка кастом даты новым методом нормализованные данные не меняет, а меняет только сырую строку, и устанавливает приоритет сырой строки. Если с кастом датой работать не нужно, но есть подозрение, что там могут быть не стандартные данные, перед записью нет-пакета следует принудительно установить режим приоритета строки методом useStringRaw. В противном случае можно ничего не устанавливать, а пользоваться как и раньше. Правки сделаны в районе строк 202-269 и 538-550 - это если сам захочешь внести свою лепту. Если ошибок не обнаружится, описание новой возможности причешу и обновлю скрипт в опубликованных мной комплектах. Изменено 11 Мая 2017 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 11 Мая 2017 @dsh, я думал об этом, но сознательно сделал именно так. Дело в том, что я хотел не только добавить новую возможность, но также для тех людей, у которых модуль давным-давно используется, оставить его работу строго такой же, какой она была до того. Если в каком-либо моде для каких-либо целей используется метод getString() и ожидается, что он возвращает очищенные от неканонических значений данные - он должен делать это и впредь. А это значит, что проверку флага таки надо выносить в сохранение нет-пакета. Не думаю, что это так уж плохо. Да и обращаюсь я не к флагу напрямую, а вызываю публичный метод класса; другие методы и так уже вызываются там же. Проверь по возможности в игре, плз. Я уже давно пишу скрипты "вслепую". И хотя явных ошибок не видно, лучше всё-таки перебдеть. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 11 Мая 2017 Мм... хорошо, скажем так: не хотелось менять действие имеющихся публичных методов. Ни просто так, ни в зависимости от добавленного флага. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 255 Опубликовано 12 Мая 2017 (изменено) @Graff46, вот именно в виде такой таблицы возвращает кастом-дату метод :getTable(), о чём мы тут и говорим битых 2 страницы. Это удобно, но был недостаток в виде безальтернативной фильтрации "неправильных" данных, от которого мы теперь избавились. Кстати, как и обещал, обновил описание m_netpk в соответствии с изменениями и выложил обновлённые комплекты. Всё, как и раньше, лежит здесь. Изменено 12 Мая 2017 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение