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

Сборочный цех


Zander_driver

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

Давно пора.

 

Внесу свои (чужие, конечно) 5 копеек в виде подборки модулей Артоса (все - последних опубликованных автором версий) и одного от xStream - на случай, если у автора темы какого-то из них нет. После принятия к сведению пост можно потереть.

 

@Artos:

Ссылки на устаревшие версии модулей Artos'а удалены.

Актуальные версии (с исправлением найденных ошибок) опубликованы в этом посте.

 

@xStream:

xs_sandbox - система событий, «песочница» по терминологии автора.

 

Все модули мультиплатформенные, инструкция вложена в каждый архив.

 

@Dennis_Chikin, здесь, на мой взгляд, допустимо обсуждение самих готовых модулей, вопросов их использования и т. п.

 

О подключении модуля se_stor к ЗП: Начиная отсюда, несколько следующих постов.

Zander.

Изменено пользователем Kirgudu
  • Спасибо 1
  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

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

Ссылки те же (обновлены комплект se_stor и общий комплект).

За помощь в тестировании спасибо @Romz.

Изменено пользователем Kirgudu
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

@Zander_driver, если чувствуется, что это может кому-нибудь пригодиться, почему бы и нет? Хотя могут и помидорами закидать...

 

Раз уж так вышло, что я недавно взял на себя посильную доводку модулей Артоса, позволю себе слегка прокомментировать обновлённую шапку.

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

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

В этом общем комплекте от @Romz также использовался устаревший se_stor, неправильно работающий с чанками на платформах ЧН/ЗП.

Для своего времени штука была хорошая, но сейчас уже сильно устарела, да и не без ошибок. Разве только кому-то позарез нужна именно старая версия... Изменено пользователем Kirgudu
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Обновил комплект модулей Artos'а в этом посте - было найдено и исправлено несколько ошибок в модулях lua_helper и m_timers.

 

@Zander_driver, просьба обновить шапку. Во время заливки я обнаружил, что модули Артоса качают в основном из поста, на который ведёт ссылка «Модули Артоса и xStream». Но они там заведомо содержат ошибки, которые уже были исправлены позднее! Из того поста можно брать только xs_sandbox от xStream.
Под модули Артоса нужно сделать новую ссылку, ведущую на вышеуказанный пост.
А ссылка «Установка модулей Artos`a на ЗП» должна вести не на этот же пост, а напрямую в соответствующую часть темы «скриптование».

Поделиться этим сообщением


Ссылка на сообщение

@naxac, спасибо. Какая из версий скрипта, выложенных Artos'ом (либо кем-то ещё позднее) послужила основой? Интересуюсь с целью интеграции исправлений в свой комплект "на все случаи жизни". По сравнению с тем, что есть у меня, изменений довольно много и не всегда очевидно, что они связаны именно с вышеперечисленными исправлениями.

Заметил, кстати, что твой вариант требует реализации в каком-либо виде функции table.size() (например, путём подключения Artos'овского же модуля lua_extension), поскольку в скачиваемом скрипте она отсутствует. Тем, кто "в теме" всё равно, а остальным следует об этом знать.

Поделиться этим сообщением


Ссылка на сообщение

@dsh, или так:

str = string.trim( str:gsub(";.-\n", "\n") )
Спасибо, взял себе и обновил свою выкладку в этой теме (ссылки те же). Изменено пользователем Kirgudu

Поделиться этим сообщением


Ссылка на сообщение

 

 

Было бы неплохо многообразие Артосо-модулей со всевозможными правками и дополнениями от разных авторов привести к некоему единому массиву полезностей...

В моей подборке модулей Артоса учтены все исправления, когда-либо сделанные разными участниками, кроме тех, что выложил @naxac в этом посте. Всё никак руки не дойдут до интеграции и проверки. Очень надеюсь, что получится заняться этим в ближайшем будущем. Возможно, если б кто-нибудь независимый подтвердил, что правки @naxac работают так, как ожидается, и они действительно нужны - это ускорило бы объединение.

Поделиться этим сообщением


Ссылка на сообщение

Обновил подборку модулей @Artos'а в этом посте (третья по счёту ссылка в текущей шапке).

Изменению подвергся модуль m_netpk - интегрированы следующие правки от @naxac:

- исправлен разбор num_items и чтение некоторых параметров update-части пакета объектов, наследованных от cse_alife_inventory_item;

- исправлено чтение update-части в net_cse_alife_item_weapon_magazined_w_gl;

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

Также не стал брать кое-какие частные исправления, предназначенные для работы с внешними amk-скриптами.

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

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

Поделиться этим сообщением


Ссылка на сообщение

@dsh, вот точно помню, что исправлял! Аккурат тогда, когда прочёл сообщение об этой ошибке.

Видимо, исправление «потерялось» во время интеграции правок от naxac.

Спасибо, что сообщил, обновил выложенные сборки.

Поделиться этим сообщением


Ссылка на сообщение

@Graff46, мнения расходятся.
Лично я пользуюсь модулем, выложенным в этом посте - это последняя версия, опубликованная Артосом, для неё форумчанами также были сделаны исправления ряда найденных ошибок.
Если не ошибаюсь, данный модуль также получил некоторое развитие в каком-то из модов, одним из авторов которого является @naxac, но какие там были сделаны добавки, общие или частные, нужно спрашивать у него.
С другой стороны, насколько мне известно, автор данной темы @Zander_driver по некоторым причинам пользуется более старой версией модуля.
ИМХО, стоит начать с m_netpk, а уж если что-то не устроит - переходить на иное.

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

Поделиться этим сообщением


Ссылка на сообщение

@Graff46, m_netpk всё-таки наиболее современный, в нём самим Артосом было исправлено много ошибок и сделано много доработок по сравнению с m_net_utils. Повторюсь, если уж начинать, то с него. ИМХО, конечно.
Скрипт xStream не щупал, про его плюсы и минусы ничего сказать не могу.

Поделиться этим сообщением


Ссылка на сообщение

@dsh, так это всё тогда совместно обсуждалось и разрабатывалось. Согласен, не исключено что xStream была своего рода первопроходцем. Не в курсе деталей, но по истории форума при желании проследить, думаю, можно.

Кстати,

если ты иногда захочешь в custom data писать данные не в формате ini

что имеешь в виду? Запись/чтение голой строки "as is", без внутреннего парсинга с попутной потерей неканонических данных? Если есть необходимость, такой форсированный режим добавить не сложно.

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

Поделиться этим сообщением


Ссылка на сообщение

@Graff46, а вот это как раз и есть формат ini, который m_netpk понимает и парсит для тебя в таблицу при чтении нет-пакета.


Update:

Хотел было по-быстрому добавить в m_netpk поддержку произвольной строки, но, заглянув в скрипт, понял, что это не обязательно.
В конфиге m_netpk.ltx есть такой параметр:

disable_convert_custom_data   = false ;--/ отключить конвертирование 'custom_data' из строки в таблицу (и обратно)

Если поставить здесь true - кастом дата всегда будет представлена только в виде строки. И если уж конкретный скриптёр знает, зачем писать туда данные не в формате ini, ему не составит труда оперировать строками в том числе и для канонических данных.

Поделиться этим сообщением


Ссылка на сообщение

@dsh, могут появиться проблемы с внутренним пониманием данных.

При глобально включённом парсинге кастом дата хранится в таблице. Допустим, сырую строку, заданную методом setStringRaw, можно записывать в отдельное свойство. А как писать в нет-пакет? Приоритет сырой строки или таблицы? Или конкатенация того и другого?

Обратная ситуация с чтением из нет-пакета строки. По каким критериям модуль должен решить, что парсить в таблицу, а что оставить в виде строки (если вообще что-то следует оставлять)?

 

ЗЫ: Не переместиться ли нам вместе с несколькими вышенаписанными постами в "скриптование"?

 

 

Рабочее предложение такое:

При чтении из нет-пакета (при глобально включённом парсинге) кастом дата всегда пишется как в таблицу, так и, полной неизменной строкой, в дополнительное свойство.

Метод getStringRaw (или прямой обращение к доп. свойству, скажем ) в таком случае будет возвращать полную строку, а метод getString - строку, полученную из таблицы.

При штатной записи в нет-пакет будет попадать строка, также полученная из таблицы.

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

Если ты хочешь записать в кастом дату что-то особенное, используешь метод setStringRaw - в доп. свойство попадает нужная тебе строка, одновременно устанавливается флаг. При записи нет-пакета и наличии этого флага таблица будет игнорироваться, а строка будет писаться из доп. свойства.
Этот же флаг можно взводить вручную для конкретного пакета (например, ещё одним добавленным методом useStringRaw), если кастом дату ты изменять не собираешься, но знаешь, что там могут быть нетипичные данные. Но делать это надо будет при каждом изменении такого нет-пакета и это будет на совести скриптёра. Иначе - в нет-пакет опять пойдет строка, полученная из таблицы.

 

Какие будут мнения?

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

Поделиться этим сообщением


Ссылка на сообщение

@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 - это если сам захочешь внести свою лепту.

Если ошибок не обнаружится, описание новой возможности причешу и обновлю скрипт в опубликованных мной комплектах.

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

Поделиться этим сообщением


Ссылка на сообщение

@dsh, я думал об этом, но сознательно сделал именно так.

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

Если в каком-либо моде для каких-либо целей используется метод getString() и ожидается, что он возвращает очищенные от неканонических значений данные - он должен делать это и впредь. А это значит, что проверку флага таки надо выносить в сохранение нет-пакета.

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

 

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

Поделиться этим сообщением


Ссылка на сообщение

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

Поделиться этим сообщением


Ссылка на сообщение

@Graff46, вот именно в виде такой таблицы возвращает кастом-дату метод :getTable(), о чём мы тут и говорим битых 2 страницы. :) Это удобно, но был недостаток в виде безальтернативной фильтрации "неправильных" данных, от которого мы теперь избавились.

 

Кстати, как и обещал, обновил описание m_netpk в соответствии с изменениями и выложил обновлённые комплекты. Всё, как и раньше, лежит здесь.

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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

×
×
  • Создать...