Jump to content
Korean Random
John_Nash

Давайте сделаем дистрибутив XFW.

Recommended Posts

Пытаясь запустить тестовый мод https://bitbucket.org/XVM/xfw.hello_world, обнаружил, что в природе не существует отдельного дистрибутива XFW, то есть, чтобы его можно было копировать в папку клиента res_mods. Репо XFW  прекрасно компилится, но файлы на выходе не расфасовываются по нужным директориям согласно структуре каталогов XVM Framework.

 

Оно и не беда, потому как в сборке XVM, для которого XFW является суб-репо, билд-скрипты настроены копировать что надо куда надо. Однако для писания XFW - based модов, отвязанных от XVM, неудобно. Потому что как деплоить такие моды? Ставить весь XVM можно, конечно, но как-то неопрятно.

 

То есть нужно копаться в билд-скриптах.

 

Непроизвольно хочется навести порядок в развёртывании XFW. Хотелость бы, чтобы по результатам билда XFW -- без всякого XVM-а --  файлы бы уже раскладывались по правильным подпапкам директории res_mods. Чтобы можно было сразу копировать в клиент и сверху добавлять пакеты собственно модов. 

 

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

 

С точки зрения собственно XVM это лишняя ступень копирования. Однако она прояснила бы логику деплоймента XFW и полностью отвязало бы развёртывание XVM от развёртывания XFW. Потому что сейчас они смешаны в одну кучу, что не есть гут.

 

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

 

Если отцы-командиры дадут добро (и подскажут иные подводные камни), занялся бы доработкой XFW (и неизбежно XVM ) в этом направлении. Всё равно ведь буду разбираться.

Edited by John_Nash
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

ОК, новые грабли :)

 

Для начала покопался в билд-скриптах в части копирования файлов, относящихся к XFW -- что, куда и почему.

 

"Файлы, относящиеся к XFW" -- это

1. Точки входа -- всё, что копируется в папку %WOT_CLIENT_DIR%/res_mods/%WOT_VERSION%/

2. Всё, что копируется в папку  %WOT_CLIENT_DIR%/res_mods/mods/xfw/

    В релизе в этой директории 4 папки:

  1. actionscript
  2. native
  3. python
  4. resources (пустая -- сбивает с толку, можно её выкинуть?)

Естественно ожидать что все эти файлы компилятся в проекте XFW, а XVM сам вытягивает из проекта XFW что надо и кладёт куда надо.

В большой степени оно так и есть. В скрипте XVMBUILD_ROOT_PATH\build.sh , в функции build_xfw()

 

Точка входа для AS3 скриптов:

cp -rf src/xfw/~output/swf_wg/*.swf ~output/~ver/gui/flash/

Содержимое res_mods/mods/xfw/python/ :

cp -rf src/xfw/~output/python/mods/* ~output/mods/

Точка входа для питон-скриптов:

cp -rf src/xfw/~output/python/scripts/* ~output/~ver/scripts/

Содержимое res_mods/mods/xfw/actionscript/ :

cp -rf src/xfw/~output/swf/*.swf ~output/mods/xfw/actionscript/

Всё это очень логично и прекрасно, однако остаётся загадкой происхождение папки res_mods/mods/xfw/native.

Она собирается явно не в проекте XFW. Однако лежит в (пусть условном) дистрибе XFW. Что несколько смущает.

 

Откуда берётся папка native найти нетрудно: в суб-репо xvm\src\xvm-native в скрипте build.sh есть замечательная функция copy()

copy()
{
    mkdir -p "$currentdir/../../~output/mods/packages/"
    cp -rf "$currentdir/release/packages/" "$currentdir/../../~output/mods/" 
   
    mkdir -p "$currentdir/../../~output/mods/xfw/"
    cp -rf "$currentdir/release/xfw/" "$currentdir/../../~output/mods/"
    
    cp -rf "$currentdir/libpython/release/libpython/bin/python27.dll" "$currentdir/../../~output/mods/xfw/native/python27.dll"    

    mkdir -p "$currentdir/../../~output/mods/xfw/native/lib"
    cp -rf "$currentdir/libpython/release/modules/bin/_ctypes.pyd" "$currentdir/../../~output/mods/xfw/native/lib/_ctypes.pyd"
}

То есть этот скрипт, на минуточку, из проекта xvm-native, лезет в корень проекта XVM и кладёт свои файлы в условный дистрибутив XFW -- третьего проекта.

 

Тут возникают вопросы и формальные и содержательные.

 

Формальные попроще: чтобы скрипты из суб-проекта (XVM-native) не лазили в проекты верхнего уровня (XVM). Это сделать нетрудно, перетащить копирование в скрипты XVM и всё. Но не будем спешить.

 

Вопрос содержательный поинтереснее: как так вышло, что часть файлов XFW компилится в отдельном проекте и подкладывается в дистрибутив руками. И, главное, что с этим можно сделать. Да и нужно ли?

 

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

 

Пока что понятно, что у XFW  есть native часть, которая вставляется в него извне. ОК.  За что эта часть отвечает? Насколько от неё зависят другие части XFW? Первое впечатление -- это вообще основа основ. Как тогда без неё компилятся остальные части XFW?

 

В общем, плиз хелп. Объясните нубу.

Share this post


Link to post

Short link
Share on other sites

... чтобы его можно было копировать в папку клиента res_mods.

а если её не будет ?

 

Меня зовут Антон, я работаю в WG и занимаюсь модами и смежными штуками.

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

 

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

В будущем в силу ряда причин мы бы хотели отойти от способа установки модов через res_mods/;

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

https://koreanrandom.com/forum/topic/36987-%D0%BF%D1%8D%D0%BA%D0%B5%D0%B4%D0%B6%D0%B8-%D0%BC%D0%BE%D0%B4%D0%BE%D0%B2/

Share this post


Link to post

Short link
Share on other sites
а если её не будет ?

Хороший вопрос. Подозреваю, что задаваемые мной вопросы и встанут в полный рост. А картошка подбавит и новых.

 

Потому что ВГ предлагают страшно сырую штуку, по крайней мере, в заглавной записи про пакеты проблема зависимостей вообще не упоминается. А она ключевая.Тот же XVM -- огромная система, зависимостей масса, причём как по коду, так и по компилированию и копированию файлов. Первое, и второе, и третье -- разные вещи.

 

 

Тут Миша может подсказать.

Вообще, почему я все эти вопросы задаю? Захотелось написать мод

1. используя XFW

2. чтобы его можно было устанавливать без установки всего XVM, а с минимальным набором -- видимо, этот минимальный набор и есть XFW (не факт)

3. чтобы при обновлении набора из пункта 2 обновлять отдельно стоящий мод было по возможности легче и проще.

 

Наверное, для всего этого XFW и создавался. Но пока как-то сложновато. Даже для тестового мода xfw.hello_world выделить XFW не так-то просто. Прямо сейчас я поудалял руками ненужные файлы в дистрибутиве. Но это очень-очень плохой костыль.

Edited by John_Nash

Share this post


Link to post

Short link
Share on other sites

Вопрос содержательный поинтереснее: как так вышло, что часть файлов XFW компилится в отдельном проекте и подкладывается в дистрибутив руками. И, главное, что с этим можно сделать. Да и нужно ли?

 

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

 

Пока что понятно, что у XFW  есть native часть, которая вставляется в него извне. ОК.  За что эта часть отвечает? Насколько от неё зависят другие части XFW? Первое впечатление -- это вообще основа основ. Как тогда без неё компилятся остальные части XFW?

 

В общем, плиз хелп. Объясните нубу.

 

Внезапно за 3 дня до выхода 9.17 выяснилось, что он не работает на XP. Пришлось быстро патчить worldoftanks.exe на ходу. Так получилось, что всё было засунуто именно XVM.

 

Native часть - это поддержка написания расширений С и фикс работоспособности на XP 

 

Определенно, это ошибочно, и часть нужно перенести в XFW.

 


Сделано

Edited by Mixaill

Share this post


Link to post

Short link
Share on other sites

 

 

Внезапно за 3 дня до выхода 9.17 выяснилось, что он не работает на XP. Пришлось быстро патчить worldoftanks.exe на ходу. Так получилось, что всё было засунуто именно XVM. Native часть - это поддержка написания расширений С и фикс работоспособности на XP Определенно, это ошибочно, и часть нужно перенести в XFW.

 

Спасибо.

 

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

 

Насколько понял, в xvm-native компилятся библиотеки, часть и которых нужна для XFW, а часть -- для отдельных модов в составе XVM. Как раз фикс для XP логично отнести к XFW, так как он делается раз и навсегда для всего колхоза.

 

Вообще в XFW из xvm-native копируются всего 3 файла: python27.dll, lib\_ctypes.pyd и упомянутый фикс XVMNativeWOTFix.pyd. Было бы логично вынести их создание в отдельный проект XFW-native.

 

Тут могут быть подводные камни, потому что нативные части остальных модов должны компилироваться единообразно с   нативными частями XFW. Наверное.


 

 

Сделано

 

Упс, пока строчил простыню :)

Share this post


Link to post

Short link
Share on other sites

Вроде я примерно так и сделал

 


 

Сейчас у нас есть 3 репозитория

* XVM
* XFW
* wot.libpython
 

Зависят они таким образом

/                             --> XVM
/src/xfw                      --> XVM Framework
/src/xfw/src/native/libpython --> Libpython
В libpython содержатся

* python27.dll
* _ctypes.pyd
В XFW содержится

* xfw_wotfix.pyd
В XVM находятся остальные модули (вибро, работа с банками, пинг, счетчик кадров)

Возможно, часть из них (все?) можно перекинуть в XFW

Edited by Mixaill
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Сорри, совсем я запутался. wot.libpython -- это то же самое, что и субрепо xvm-native в Меркуриале, которое скачивается при клонировании репо XVM ?

Share this post


Link to post

Short link
Share on other sites

Смотрите

 

/

/src - каталог

/src/xvm-native/ - каталог внутри репы XVM
/src/xvm-native/libpython - субрепа wot.libpython, которой не стало
/src/xvm-native/packages/xvm_wotfix/ - каталога которого не стало

/src/xfw - субрепа xfw
/src/xfw/src/native - новый каталог
/src/xfw/src/native/libpython - субрепа wot.libpython теперь здесь, внутри субрепы xfw :)
/src/xfw/src/native/xfw_wotfix - xvm_wotfix переехал сюда

Share this post


Link to post

Short link
Share on other sites

 

 

Смотрите

 

Спасибо. Выглядит круто. Сорри, не успел склонить и потрогать руками новую структуру каталогов. Надеюсь, нынче вечером, и напишу по результатам.

Share this post


Link to post

Short link
Share on other sites
Смотрите

Посмотрел -- вообще всё идеально. Нативные либы XFW стали субрепо XFW. Фикс для WinXP стал частью XFW. Нативная часть XVM пакетов откочевала в XVM. 

В результате XFW вообще не знает о существовании XVM, как и быть должно. Более того, нативные либы ничего не знают о вотфиксе и об остальном XFW. Но компилятся вместе, что важно.

 

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

 

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

 

Кроме того, xfw.hello_world станет более аккуратным --  т.к. либы swc, на которые он опираются, будут не падать с неба, а браться из результатов билда XFW. Красиво же.

 

Если дадите добро -- сделаю  пулл реквест для xfw.hello_world. 

Оффтопик. В билд скрипте верхнего уровня есть функция build_native(). Казалось бы, она должна запускать скрипт билда уровнем ниже. Но она только копирует. Это нормально?

Оффтопик. В верхней папке XFW появились два новых скрипта. Что делает xfw / _build_package.sh  понятно -- раскладывает файлы согласно мануалу. Скрипт xfw / _build_wotmod.sh тоже как-то раскладывает скомпилированное, но иначе. А зачем? Иной способ внедрения мода в клиент?

Edited by John_Nash

Share this post


Link to post

Short link
Share on other sites

Оффтопик. В билд скрипте верхнего уровня есть функция build_native(). Казалось бы, она должна запускать скрипт билда уровнем ниже. Но она только копирует. Это нормально?

Это так и задумано.

А зачем? Иной способ внедрения мода в клиент?

Задел на будущее.

Share this post


Link to post

Short link
Share on other sites

 

 

Это так и задумано.

Спасибо.

 

 

 

Задел на будущее.

 

ОК. Спасибо.

 

Пулл реквест для xfw.hello_world делать? 

Share this post


Link to post

Short link
Share on other sites

Пулл реквест для xfw.hello_world делать? 

Я в hello_world специально подключал swc, а не сабрепу. Точно не помню почему, вроде для того, чтобы не усложнять пример настройкой билда XFW.

Share this post


Link to post

Short link
Share on other sites

Внезапно, оно пока не взлетает. Похоже, проблема совместимости:  XFW стало независимым уже после перехода на версию общего теста 0.9.17.1,  а тестировал я на текущем клиенте, который  0.9.17.0.3.

 

 Городить костыли для актуальной ныне версии клиента особого смысла нет. Особенно для hello_world проекта, который должен быть рабочей заготовкой.

 

Попробую с клиентом общего теста.

 

Тяжёлое наследие :)

Share this post


Link to post

Short link
Share on other sites

Заработало!  Для клиента с общего теста, как и предполагал.

Выложил репо.

 

Отдельное спасибо Михаилу за сепарацию XFW.

 

Ещё раз, почему эта сепарация важна? Можно не тащить весь огромный XVM, а только относительно небольшой XFW. При этом будет поддерживаться полная совместимость с XVM. Например, все бонусы от апдейтов XFW.

  • Upvote 1

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...