Jump to content
Korean Random
ribbed

Mod packages / Пакеты модов

Recommended Posts

14 hours ago, Polyacov_Yury said:

Почему-то при наличии чего бы то ни было в поле extra у ZipInfo какого-либо файла ломает этот самый файл (ResMgr просто игнорирует байт, в котором написана длина этого самого extra, и читает контент файла сразу после его имени, срезая вместо этого его данные в конце на то же число байт).

Потому что у картошко-кодеров, судя по всему, руки растут не совсем откуда нужно. Если уж было сказано, что формат пакетов zip, тогда уж реализуйте менеджер ресурсов в соответствии с протоколом, либо публикуйте актуальную документацию по формату. Сидеть и раскуривать, почему с одним упаковщиком работает, а с другим нет, уже за*****ло, честное слово.

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites
9 минут назад, GPCracker сказал:

Потому что у картошко-кодеров, судя по всему, руки растут не совсем откуда нужно. Если уж было сказано, что формат пакетов zip, тогда уж реализуйте менеджер ресурсов в соответствии с протоколом, либо публикуйте актуальную документацию по формату. Сидеть и раскуривать, почему с одним упаковщиком работает, а с другим нет, уже за*****ло, честное слово.

Да кто вам сказал, что они у них присутствуют вообще (руки)..... что вы, я вас умоляю, они их делают  ОППОЙ и при этом ей же и думают

Share this post


Link to post

Short link
Share on other sites

Кстати, раз уж тут пошла пьянка про редактирование gui.mods.__init__ - почему бы не запихнуть функцию findValidMods под @adisp.async()? А то винда иногда аж ругается, мол, у тебя подвисло :)

Share this post


Link to post

Short link
Share on other sites
Только что, Polyacov_Yury сказал:

Кстати, раз уж тут пошла пьянка про редактирование gui.mods.__init__ - почему бы не запихнуть функцию findValidMods под @adisp.async()? А то винда иногда аж ругается, мол, у тебя подвисло :)

 

И как тогда линейная последовательность загрузки будет выполняться?

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, StranikS_Scan сказал:

И как тогда линейная последовательность загрузки будет выполняться?

 

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

Share this post


Link to post

Short link
Share on other sites
Только что, Polyacov_Yury сказал:

 

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

 

Чиво? При линейной загрузке всё что происходит в твоем моде по вызову import "твой_мод" должно и будет выполняться в главном потоке. После чего главный поток перейдет к следующему импорту. Если ты хочешь, чтобы при импорте твоего мода главным потоком, что-то в твоем моде начало жить своей жизнью, то сам прописывай потоки. Главная треда запустит твои потоки и пойдет дальше по своим делам моды импортировать.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites
1 час назад, StranikS_Scan сказал:

Чиво? При линейной загрузке всё что происходит в твоем моде по вызову import "твой_мод" должно и будет выполняться в главном потоке. После чего главный поток перейдет к следующему импорту. Если ты хочешь, чтобы при импорте твоего мода главным потоком, что-то в твоем моде начало жить своей жизнью, то сам прописывай потоки. Главная треда запустит твои потоки и пойдет дальше по своим делам моды импортировать.

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

Share this post


Link to post

Short link
Share on other sites
Только что, Polyacov_Yury сказал:

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

 

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

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Кароче ну как всегда.
В кратце: мод грузится 2 раза. В meta.xml версии прописаны разные.
Отличие в пакетах: Имя питон файла и папки с модом.
http://joxi.ru/V2V5PPdF0PONjm

На этом всё.
И тут вопрос, на кой тогда нужен meta.xml если там явно прописана версия которую нужно использовать но при этом старый пакет не отключается ?

Share this post


Link to post

Short link
Share on other sites
9 минут назад, Armagomen_dev сказал:

Отличие в пакетах: Имя питон файла и папки с модом.

 

9 минут назад, Armagomen_dev сказал:

на кой тогда нужен meta.xml

meta.xml разрешает конфликты между вотмодами. Если ты переименовал скрипт - то конфликта никакого не будет, и обе версии будут импортированы. RTFM.

Share this post


Link to post

Short link
Share on other sites
34 minutes ago, Armagomen_dev said:

В meta.xml версии прописаны разные.

Так в доке явно написано, что

Quote

При наличии узла <id> в файле meta.xml, имя файла пакета не влияет на порядок загрузки. Пакеты, у которых <id> совпадает, считаются разными версиями или частями одной и той же модификации, и конфликты между ними также не учитываются. Данные пакеты загружаются в порядке увеличения версии, которая хранится в узле <version>.

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

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

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

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites
11 часов назад, Polyacov_Yury сказал:

meta.xml разрешает конфликты между вотмодами.

 

11 часов назад, GPCracker сказал:

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

 

Короче я понял, он в роди бы как устраняет конфликты по задумке, но в реале не очень.

Share this post


Link to post

Short link
Share on other sites
Все пакеты, находящиеся в каталоге <каталог_WoT>/mods/<версия_WoT>/, сортируются по значениям
узлов <id> и <version> в файле meta.xml и загружаются по порядку. В случае отсутствия файла
meta.xml внутри пакета, в качестве идентификатора пакета будет использовано имя файла.
При наличии узла <id> в файле meta.xml, имя файла пакета не влияет на порядок загрузки. Пакеты,
у которых <id> совпадает, считаются разными версиями или частями одной и той же модификации,
и конфликты между ними также не учитываются. Данные пакеты загружаются в порядке увеличения
версии, которая хранится в узле <version>.
Версии пакетов сравниваются посимвольно согласно таблице ASCII. Поведение аналогично функции
strcmp().

В каталоге три пакета:

GPCracker.XModLib_v0.1.13.wotmod (<id>GPCracker.XModLib</id><version>0.01.13-000-59eddcfc</version>)
GPCracker.XModLib_v0.1.17.wotmod (<id>GPCracker.XModLib</id><version>0.01.17-000-5a852716</version>)
GPCracker.XModLib_v0.1.17-dirty.wotmod (<id>GPCracker.XModLib</id><version>0.01.17-000-5ad18616</version>)

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

2018-04-14 12:54:31.694: INFO: [PY_DEBUG] Mod package 'd:/wingames/world of tanks/mods/1.0.0.1/gpcracker.xmodlib_v0.1.13.wotmod' loaded
2018-04-14 12:54:31.694: INFO: [PY_DEBUG] Mod package 'd:/wingames/world of tanks/mods/1.0.0.1/gpcracker.xmodlib_v0.1.17-dirty.wotmod' loaded
2018-04-14 12:54:31.694: INFO: [PY_DEBUG] Mod package 'd:/wingames/world of tanks/mods/1.0.0.1/gpcracker.xmodlib_v0.1.17.wotmod' loaded

Судя по тому, что вылета с конфликтом не происходит, meta.xml скорее всего таки подтягивается, но сортировка как-то странно себя ведет.

@ribbed @Finister @Darth_Abaddon

Share this post


Link to post

Short link
Share on other sites

А теперь вспоминаем, по какому алгоритму сортируется version, и прогоняем через него ручками те версии, которые написаны у тебя в meta.

Share this post


Link to post

Short link
Share on other sites
2 minutes ago, Polyacov_Yury said:

А теперь вспоминаем, по какому алгоритму сортируется version, и прогоняем через него ручками те версии, которые написаны у тебя в meta.

Согласно таблице ASCII, если судить по документации, в том-то как-бы и дело.

>>> sorted(['0.01.17-000-5a852716', '0.01.17-000-5ad18616', '0.01.13-000-59eddcfc'])
['0.01.13-000-59eddcfc', '0.01.17-000-5a852716', '0.01.17-000-5ad18616']

А если сравнивать вручную, то символ 3 меньше символа 7, поэтому 0.01.13-000-59eddcfc будет первым, что, собственно, и происходит. А вот если сравнивать дальше, то начинается неведомая хрень. Символ 8 меньше символа d, но несмотря на это 0.01.17-000-5ad18616 почему-то грузится раньше.

Информация специально для Юры. Последний набор символов - это закодированный в hex timestamp времени сборки. И насколько я понимаю, реализация сравнения строк на Python описана здесь, и она не особо отличается от алгоритма работы strcmp.

Share this post


Link to post

Short link
Share on other sites
6 часов назад, GPCracker сказал:

Символ 8 меньше символа d, но несмотря на это 0.01.17-000-5ad18616 почему-то грузится раньше.

попробуй посмотреть не питон.логу а потому, что именно вытягивается с помощью ResMgr

Share this post


Link to post

Short link
Share on other sites
Just now, Mixaill said:

что именно вытягивается с помощью ResMgr

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

Share this post


Link to post

Short link
Share on other sites

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

del

 

Edited by Draugd

Share this post


Link to post

Short link
Share on other sites
19 минут назад, Draugd сказал:

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

Цифровая панель счета (Makct).rar

Так для пакетов путь другой же,соответственно скрипт нужно под него переделывать.Просто так закинув в res не будет работать.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...