John_Nash 41 Posted February 7, 2017 (edited) Пытаясь запустить тестовый мод 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 February 9, 2017 by John_Nash 2 Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #378873 Posted February 7, 2017 Давай попробуем, посмотрим, что будет получаться. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #378896 Posted February 8, 2017 ОК, новые грабли :) Для начала покопался в билд-скриптах в части копирования файлов, относящихся к XFW -- что, куда и почему. "Файлы, относящиеся к XFW" -- это 1. Точки входа -- всё, что копируется в папку %WOT_CLIENT_DIR%/res_mods/%WOT_VERSION%/ 2. Всё, что копируется в папку %WOT_CLIENT_DIR%/res_mods/mods/xfw/ В релизе в этой директории 4 папки: actionscript native python 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? В общем, плиз хелп. Объясните нубу. Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #378897 Posted February 8, 2017 Тут Миша может подсказать. Quote Share this post Link to post Short link Share on other sites
tricsi 1,144 #378899 Posted February 8, 2017 ... чтобы его можно было копировать в папку клиента 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/ Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #378911 Posted February 8, 2017 (edited) а если её не будет ? Хороший вопрос. Подозреваю, что задаваемые мной вопросы и встанут в полный рост. А картошка подбавит и новых. Потому что ВГ предлагают страшно сырую штуку, по крайней мере, в заглавной записи про пакеты проблема зависимостей вообще не упоминается. А она ключевая.Тот же XVM -- огромная система, зависимостей масса, причём как по коду, так и по компилированию и копированию файлов. Первое, и второе, и третье -- разные вещи. Тут Миша может подсказать. Вообще, почему я все эти вопросы задаю? Захотелось написать мод 1. используя XFW 2. чтобы его можно было устанавливать без установки всего XVM, а с минимальным набором -- видимо, этот минимальный набор и есть XFW (не факт) 3. чтобы при обновлении набора из пункта 2 обновлять отдельно стоящий мод было по возможности легче и проще. Наверное, для всего этого XFW и создавался. Но пока как-то сложновато. Даже для тестового мода xfw.hello_world выделить XFW не так-то просто. Прямо сейчас я поудалял руками ненужные файлы в дистрибутиве. Но это очень-очень плохой костыль. Edited February 8, 2017 by John_Nash Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #379009 Posted February 9, 2017 (edited) Вопрос содержательный поинтереснее: как так вышло, что часть файлов XFW компилится в отдельном проекте и подкладывается в дистрибутив руками. И, главное, что с этим можно сделать. Да и нужно ли? Поймите меня правильно: всё это писалось постепенно, проделана огромная работа, на всё были резоны. Не дошли руки разобраться. Работает -- и норм. Но свежему человеку... сложновато. Пока что понятно, что у XFW есть native часть, которая вставляется в него извне. ОК. За что эта часть отвечает? Насколько от неё зависят другие части XFW? Первое впечатление -- это вообще основа основ. Как тогда без неё компилятся остальные части XFW? В общем, плиз хелп. Объясните нубу. Внезапно за 3 дня до выхода 9.17 выяснилось, что он не работает на XP. Пришлось быстро патчить worldoftanks.exe на ходу. Так получилось, что всё было засунуто именно XVM. Native часть - это поддержка написания расширений С и фикс работоспособности на XP Определенно, это ошибочно, и часть нужно перенести в XFW. Сделано Edited February 9, 2017 by Mixaill Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379051 Posted February 9, 2017 Внезапно за 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. Наверное. Сделано Упс, пока строчил простыню :) Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #379052 Posted February 9, 2017 (edited) Вроде я примерно так и сделал Сейчас у нас есть 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 February 9, 2017 by Mixaill 1 Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379059 Posted February 9, 2017 Сорри, совсем я запутался. wot.libpython -- это то же самое, что и субрепо xvm-native в Меркуриале, которое скачивается при клонировании репо XVM ? Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #379063 Posted February 9, 2017 Смотрите / /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 переехал сюда Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379104 Posted February 10, 2017 Смотрите Спасибо. Выглядит круто. Сорри, не успел склонить и потрогать руками новую структуру каталогов. Надеюсь, нынче вечером, и напишу по результатам. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379224 Posted February 10, 2017 (edited) Смотрите Посмотрел -- вообще всё идеально. Нативные либы 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 February 10, 2017 by John_Nash Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #379229 Posted February 10, 2017 Оффтопик. В билд скрипте верхнего уровня есть функция build_native(). Казалось бы, она должна запускать скрипт билда уровнем ниже. Но она только копирует. Это нормально?Это так и задумано. А зачем? Иной способ внедрения мода в клиент?Задел на будущее. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379231 Posted February 10, 2017 Это так и задумано. Спасибо. Задел на будущее. ОК. Спасибо. Пулл реквест для xfw.hello_world делать? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #379237 Posted February 10, 2017 Пулл реквест для xfw.hello_world делать? Я в hello_world специально подключал swc, а не сабрепу. Точно не помню почему, вроде для того, чтобы не усложнять пример настройкой билда XFW. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379260 Posted February 11, 2017 Я в hello_world специально подключал swc, а не сабрепу. ОК ясно. Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379296 Posted February 11, 2017 Внезапно, оно пока не взлетает. Похоже, проблема совместимости: XFW стало независимым уже после перехода на версию общего теста 0.9.17.1, а тестировал я на текущем клиенте, который 0.9.17.0.3. Городить костыли для актуальной ныне версии клиента особого смысла нет. Особенно для hello_world проекта, который должен быть рабочей заготовкой. Попробую с клиентом общего теста. Тяжёлое наследие :) Quote Share this post Link to post Short link Share on other sites
John_Nash 41 #379475 Posted February 12, 2017 Заработало! Для клиента с общего теста, как и предполагал. Выложил репо. Отдельное спасибо Михаилу за сепарацию XFW. Ещё раз, почему эта сепарация важна? Можно не тащить весь огромный XVM, а только относительно небольшой XFW. При этом будет поддерживаться полная совместимость с XVM. Например, все бонусы от апдейтов XFW. 1 Quote Share this post Link to post Short link Share on other sites