Перейти к содержимому
Korean Random
John_Nash

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

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

(редактировалось)

Пытаясь запустить тестовый мод 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 ) в этом направлении. Всё равно ведь буду разбираться.

Изменено пользователем John_Nash
  • Нравится 2

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


Ссылка на сообщение
Поделиться на других сайтах

Давай попробуем, посмотрим, что будет получаться.

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


Ссылка на сообщение
Поделиться на других сайтах

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

 

Для начала покопался в билд-скриптах в части копирования файлов, относящихся к 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?

 

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

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


Ссылка на сообщение
Поделиться на других сайтах

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

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


Ссылка на сообщение
Поделиться на других сайтах

... чтобы его можно было копировать в папку клиента 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/

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


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)
а если её не будет ?

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

 

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

 

 

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

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

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

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

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

 

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

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

 

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

 

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

 

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

 

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

 

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

 

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

 


Сделано

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

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


Ссылка на сообщение
Поделиться на других сайтах

 

 

Внезапно за 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. Наверное.


 

 

Сделано

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

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

 


 

Сейчас у нас есть 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

Изменено пользователем Mixaill
  • Нравится 1

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


Ссылка на сообщение
Поделиться на других сайтах

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

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


Ссылка на сообщение
Поделиться на других сайтах

Смотрите

 

/

/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 переехал сюда

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


Ссылка на сообщение
Поделиться на других сайтах

 

 

Смотрите

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)
Смотрите

Посмотрел -- вообще всё идеально. Нативные либы 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 тоже как-то раскладывает скомпилированное, но иначе. А зачем? Иной способ внедрения мода в клиент?

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

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


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

Спасибо.

 

 

 

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

 

ОК. Спасибо.

 

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

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


Ссылка на сообщение
Поделиться на других сайтах

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

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

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


Ссылка на сообщение
Поделиться на других сайтах

 

 

Я в hello_world специально подключал swc, а не сабрепу.

ОК ясно.

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


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

 

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

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


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

 

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

  • Нравится 1

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


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×