aks1983 Posted August 3, 2016 Share Posted August 3, 2016 (edited) К сожалению, Wargaming не предоставляет документации или API по интеграции с движком, поэтому основное время уходит на реверс-инжениринг (что является юридически спорным). Понять логику работы кода будет проще, если настроить в IDE code hinting и гулять по коду, как по гиперссылкам. Здесь я бы хотел поделиться своим опытом по созданию удобного окружения для разработки и автоматизации сборки модов. В качестве среды разработки я использую IntelliJ IDEA с плагинами python, flex, ant. Сборку осуществляю в ней же. Как правило мод представляет собой проект с несколькими модулями - flex и python: Пара внешних модулей есть в каждом проекте - это wotres и wotswf, и они импортированы как зависимости. Это исходники клиента python и as3 из lobby/battle. Каждый под управлением git, любое обновление клиента отражается коммитами с номером версии, иначе сложно отслеживать ошибки, к сожалению, WG часто меняет базовый код. wotres содержит scripts из res и res_bw (последний содержит common/Lib, где можно посмотреть доступные пакеты python), я получаю исходники через uncompyle2 wotswf содержит as3 из battle.swf, lobby.swf, common_i18n.swf, а так же библиотеки org.idmedia.as3commons, com.adobe.serialization.json и fl.*, которые можно скачать отдельно. Для декомпиляции я использую jpexs-decompiler, далее пробую собрать swc-библиотеки из lobby и battle, исправляя ошибки декомпиляции. Этот процесс долгий, но требуется один раз - в итоге получаются lobby.swc и battle.swc, готовые для подключения как внешние библиотеки. Таким образом, в правильно настроенной IDE появляется code hinting, автоимпорт и обнаружение ошибок, а так же можно легко гулять по коду клиента и исследовать его. Про сборку мода. Флеш можно собирать в IDEA, однако, чтобы одной командой собирать все флешки и .pyc, копировать их в клиент вместе с прочими ресурсами и собирать .zip архив, я использую Apache Ant. Ничего хитрого нет, просто один раз сделал и пользуюсь. Чтобы подключаться в рантайме, я использую этот проект - https://github.com/juho-p/wot-debugserver, в принципе удобно просматривать внутренние структуры через автокомплит по TAB и выполнять какие-нибудь действия для тестов. Так же пробовал для отладки pydev.egg из pycharm, но есть нюансы. Edited August 3, 2016 by aks1983 6 @ Quote Link to comment Short link Share on other sites More sharing options...
spoter Posted August 3, 2016 Share Posted August 3, 2016 (edited) Привет, расскажу немного о тех инструментах которые использую я: Для разработки я использую IDE JetBrains PyCharm Это полноценная IDE, исходники клиента я разбираю с использованием pjOrion+uncompyle6 Главное чтобы имена файлов были в верном регистре, чтобы нормально отрабатывал авто-импорт модулей. В клиенте танков есть встроенный remote debug, по умолчанию настроенный на Pycharm, но никто не запрещает подключатся к нему из другой IDE достаточно закинуть содержимое архива pycharm-debug.egg из дистрибутив pycharm в папку \World_of_Tanks\res_mods\<версия>\scripts\common\pydev\pycharm\pydev и вписать в свой скрипт import bwpydevd bwpydevd.startDebug() главное следите чтобы скрипты были идентичны В работе очень сильно помогает встроенный инспектор кода alt+shift+i, который подскажет как правильно оформить код по pep8, где есть ошибки(с подробностями) и даст другие рекомендации, ну и так же по запросу может переформатировать код и оптимизировать импорты, опять же в соответствии с рекомендациями pep8, за что я его особенно люблю. После того как код написан, проверен и прошёл debug в клиенте, я буквально парой кликов заливаю код на GitHub Выбор IDE дело вкуса, например мой знакомый кодит в Visual Studio, использует так же встроенный дебаг, только с дистрибутивом от своей IDE. А ещё один знакомый использует Eclipse Удачи всем ) Edited March 31, 2017 by spoter 9 @ Quote Link to comment Short link Share on other sites More sharing options...
13 Posted August 3, 2016 Share Posted August 3, 2016 Тема закреплена. @spoter, пожалуйста, перезалейте картинки прямо на форум (и всегда заливайте их только так). На стороннем хостинге они будут автоматически удалены спустя некоторое время. @ Quote Link to comment Short link Share on other sites More sharing options...
aks1983 Posted August 3, 2016 Author Share Posted August 3, 2016 (edited) В клиенте танков есть встроенный remote debug, по умолчанию настроенный на Pycharm, но никто не запрещает подключатся к нему из другой IDE достаточно закинуть содержимое архива pycharm-debug.egg из дистрибутив pycharm в папку \World_of_Tanks\res_bw\scripts\common\pydev\pycharm\ и вписать в свой скрипт import bwpydevd bwpydevd.startDebug() главное следите чтобы скрипты были идентичны По этому поводу есть несколько замечаний: Распаковывать egg-архив можно в любую директорию из sys.path Скомпилировать, python -m compileall [path_to_extracted] Брекпоинты в декомпилированных скриптах работать не будут (или будут работать неправильно), т.к. другие номера строк Чтобы имена файлов были идентичны, можно декомпилированные скрипты прогнать через такой bash-скрипт: (все *.pyc res и res_bw копируются в директорию in~, на которую натравливается декомпилятор): 'bash script' #!/bin/bash # bash script for filename case conversion # decompiled files have prefix: # Embedded file name: [type]/scripts/[original_pathname_here] # # it tries to extract original names and rename them # files moved from in~/[type]/script # to [type]/script directory # extensions are changed to .py also fixname () { local TYPE=$1 local OLDFILE=$2 # make new filename local NEWFILE=$(head -n 1 $OLDFILE | sed -e "s/# Embedded file name: /$TYPE\//g") # detect if it is correct if [[ ! $NEWFILE =~ ^$TYPE/scripts/ ]]; then # fallback to default, just move in~/ -> . NEWFILE=$(echo "${OLDFILE%.*}.py" | sed -e "s/in~\///g") echo "Bad header in $OLDFILE, using $NEWFILE" fi if [[ $NEWFILE != $OLDFILE ]]; then echo "$OLDFILE -> $NEWFILE" DIR=$(dirname $NEWFILE) # make proper dir if necessary [ -d $DIR ] || mkdir -p $DIR mv $OLDFILE $NEWFILE else echo "$OLDFILE -> no change" fi } find in~/ -name '*.pyc' -delete find in~/res -name '*.pyc_dis*' | while IFS=$'\n' read -r FILE; do fixname res $FILE done find in~/res_bw -name '*.pyc_dis*' | while IFS=$'\n' read -r FILE; do fixname res_bw $FILE done # wow! Edited August 3, 2016 by aks1983 1 @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 3, 2016 Share Posted August 3, 2016 Я один использую Notepad++ с Орионом? 6 @ Quote Link to comment Short link Share on other sites More sharing options...
spoter Posted August 3, 2016 Share Posted August 3, 2016 По этому поводу есть несколько замечаний: Распаковывать egg-архив можно в любую директорию из sys.path Скомпилировать, python -m compileall [path_to_extracted] Брекпоинты в декомпилированных скриптах работать не будут (или будут работать неправильно), т.к. другие номера строк Чтобы имена файлов были идентичны, можно декомпилированные скрипты прогнать через такой bash-скрипт: (все *.pyc res и res_bw копируются в директорию in~, на которую натравливается декомпилятор): 'bash script' #!/bin/bash# bash script for filename case conversion# decompiled files have prefix:# Embedded file name: [type]/scripts/[original_pathname_here]## it tries to extract original names and rename them# files moved from in~/[type]/script# to [type]/script directory# extensions are changed to .py alsofixname (){ local TYPE=$1 local OLDFILE=$2 # make new filename local NEWFILE=$(head -n 1 $OLDFILE | sed -e "s/# Embedded file name: /$TYPE\//g") # detect if it is correct if [[ ! $NEWFILE =~ ^$TYPE/scripts/ ]]; then # fallback to default, just move in~/ -> . NEWFILE=$(echo "${OLDFILE%.*}.py" | sed -e "s/in~\///g") echo "Bad header in $OLDFILE, using $NEWFILE" fi if [[ $NEWFILE != $OLDFILE ]]; then echo "$OLDFILE -> $NEWFILE" DIR=$(dirname $NEWFILE) # make proper dir if necessary [ -d $DIR ] || mkdir -p $DIR mv $OLDFILE $NEWFILE else echo "$OLDFILE -> no change" fi}find in~/ -name '*.pyc' -deletefind in~/res -name '*.pyc_dis*' | while IFS=$'\n' read -r FILE;do fixname res $FILEdonefind in~/res_bw -name '*.pyc_dis*' | while IFS=$'\n' read -r FILE;do fixname res_bw $FILEdone# wow! Всё верно, но я распаковал в директорию, которая прописана в скриптах клиента, так проще. Кстати ещё полезно в клиенте включить debug_level = 'DEV' и положить скрипты в /res/scripts/wot Тоже прописано в клиенте, для запуска отладочных скриптов и т.д. А вообще приятно, что всё больше мододелов начали переходить на нормальные IDE, ещё бы бракоделы из ВГ исходники скриптов и флешек публиковали, всё равно они не обфусцированоы, а разработку модов это бы на следующий уровень качества подняло. Кстати я начинал код писать вообще в far, а потом уже в орионе. Но инспектор кода в pycharm меня покорил с первого запуска, не жалею ничуть что перешёл на него. Меня вон Юша криворуким кодером называет. Потому что видел старый мой код. Дык ещё бы, у меня нет программистского образования, писать код начал буквально в блокноте, без всяких проверок синтаксиса и нормального оформления кода. Это сейчас у меня код становится лучше, по прошествии двух лет,с тех пор как я вообще кодить на питоне начал. Хотя по факту я все ещё джуниор питонист без нормального образования и со специфическим опытом. :) Но главное что нравится кодить, и это всё перевешивает. 4 1 @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 3, 2016 Share Posted August 3, 2016 (edited) а разработку модов это бы на следующий уровень качества подняло.Это с чего бы? Я думаю, что наооборот все начнут ленится и писать код внутри исходников. Никакой совместимости модов точно не будет. Edited August 3, 2016 by ShadowHunterRUS @ Quote Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted August 3, 2016 Share Posted August 3, 2016 (edited) Sublime Text 3 с немного переделанным WoT Script Terminal и самописным плагином для сборки (в том числе flash-частей) и подключения модов в пару кликов. Adobe Animate + FlashDevelop для специфичкских задач с флэшем. И SmartGit для контроля версий. Этого добра за глаза хватает. Edited September 22, 2016 by IzeBerg @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted August 5, 2016 Share Posted August 5, 2016 Sublime Text 3Текстовые редакторы как правило более удобны для редактирования текста, нежели IDE, основной упор в которых делается на инструменты работы со скриптами. И они легче в разы, по сравнению с теми же IDE, которые тащат за собой такую кучу хлама, что и ставить не хочется. Тут по учебе как-то пришлось автокад ставить, потом дико крыл Х-этажным матом, вычищая за ним хвосты. В свое время точно так же было и со "студией", когда С проходили в универе. Винда любит собирать хлам, поэтому чем меньше тяжелого софта с кучей зависимостей - тем лучше. А текстовый редактор полюбому нужен. Тем более что у ST вполне нормальная подсветка синтаксиса. NPP тоже норм, но кодить лично мне как-то больше приятнее в ST, да и плагины на Python к нему не могут не радовать - можно писать самому. При наличии гугла под рукой и мозгов ST без проблем апгрейдится до уровня IDE при помощи тех же плагинов. Например, подсветка ошибок в коде, PyLinter или как-то так пакет называется. Да, кстати, пакетная система - тоже вещь. А что до различных функций работы с кодом у IDE - при разработке модов оно не особо-то и используется, поскольку моды работают исключительно в контексте игры. Я один использую Notepad++ с Орионом?Орион в тему, если нужно что-то декомпилить, или разбирать. Или наоборот, старательно упаковывать. Код удобнее редактировать в том же ST. Раньше использовал отладчик, потом написал WST, чтобы копипастом не страдать. Про NPP уже написал выше. Для Python-разработчика ST более интересный экземпляр. Тоже привыкал к последнему некоторое время, но оно того стоит. Хотя по факту я все ещё джуниор питонист без нормального образования и со специфическим опытом. :)Да тут у большинства мододелов такое состояние... Я тоже не программист не разу, вообще на инженера-схемотехника учусь :) Я думаю, что наооборот все начнут ленится и писать код внутри исходников.Так и сейчас никто не запрещает особо так делать. Этим в основном на еврофоруме страдают. Всем местным "старики" доходчиво объясняют, что так делать неправильно. А вот комментарии, которые удаляются при компиляции - будут очень даже кстати. Там их весьма приличное количество, судя по номерам строк в трейсах и положением методов в декомпилах. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
akey Posted August 12, 2016 Share Posted August 12, 2016 Привет, расскажу немного о тех инструментах которые использую я: Для разработки я использую IDE JetBrains PyCharm При наличии гугла под рукой и мозгов ST без проблем апгрейдится до уровня IDE при помощи тех же плагинов. Например, подсветка ошибок в коде, PyLinter или как-то так пакет называется. Да, кстати, пакетная система - тоже вещь. Приветствую! Подскажите Ваши предпочтения в настройках редакторов. То есть подробней в плагинах, настройках самого редактора и т.д. Хочу попробовать настроить ST3 и PyCharm, выявить предпочтения для себя. Заранее спасибо! @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted August 12, 2016 Share Posted August 12, 2016 Хочу попробовать настроить ST3Темы само собой на твой вкус и цвет. Из плагинов у меня стоит BracketHighlighter (подсветка скобок), FileDiffs (дифф между двумя файлами, да, ST3 умеет правильно раскрашивать диффы от рождения), JSONLint (подсветка синтаксиса JSON, поиск ошибок), Package Control, само собой, Show Character Code (мелкий плагин, показывает код символа), TrailingSpaces (подсветка и удаление ненужных пробелов в конце строки), ну и WoTScriptTerminal. Больше каких-то особых потребностей пока не возникало. Это на винде. На линуксе кроме этого есть еще пара плагинов, которые не очень комфортно и потребно ставить на винду (но в принципе возможно) (плагины-интерфейсы для различных сложных штук типа того же синтаксического анализа скрипта в реалтайме (название не помню, а винда в ext4 не умеет, посмотреть безе перезагрузки не вариант), не особо-то полезные для разработки под WoT). Ну и само собой русский и английский словари, для проверки орфографии, если конечно не хочешь клепать кучу опечаток и орфографических ошибок. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 12, 2016 Share Posted August 12, 2016 настроить ST3 Ну и само собой русский и английский словари, для проверки орфографии, если конечно не хочешь клепать кучу опечаток и орфографических ошибок. как "не программист", поставил под винду еще несколько плагинов (он-лайн переводчик от яндекса, ColorHighlighter, автозавершение и подсветка тэгов, добавил язык json (wot) для конфигов - удобно подсвечивает макросы и вложенный html-код) FileDiffs (дифф между двумя файлами, да, ST3 умеет правильно раскрашивать диффы от рождения) у меня антивирь ругался на него! заменил на Compare Side-By-Side @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 12, 2016 Share Posted August 12, 2016 (edited) у меня антивирь ругался на него! заменил на Compare Side-By-Sideзаменил бы антивирь) Что-то я не вижу того, на что мог бы ругаться нормальный антивирь https://github.com/colinta/SublimeFileDiffs Если антивирь ругается на Popen, то может стоит снизить его параноидальность? Edited August 12, 2016 by ShadowHunterRUS @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted August 12, 2016 Share Posted August 12, 2016 SublimeCodeIntelТоже на линуксе такое ставил. В разработке модов он не особо полезен, а вот при написании чего-то чисто под питон - довольно прикольная штука. у меня антивирь ругался на него! заменил на Compare Side-By-SideСтранно.. И что же ему не понравилось, интересно? Там же все сорцами прямо распространяется, просто в архив упаковывается. Обычный зип архив. заменил бы антивирь)Ага. На рубоарде есть тулза на вечный триал для касперского, KRT кажется называется, но тема видна только зареганным пользователям, раз в месяц двухминутная процедура и все, полный функционал, о обновлениями все ок. На тот же нод куча ключей в инете валяется. На вкус и цвет, короч. Чем лично мне больше нравится каспер - есть встроенный файрвол, через который довольно удобно можно резать прогам интернет, которым он не нужен. @ Quote Link to comment Short link Share on other sites More sharing options...
akey Posted August 13, 2016 Share Posted August 13, 2016 (edited) Попробовал PyCharm интересная штука оказалась, подсказки по коду действительно прикольная штука :) Spoter, или может кто знает еще, по подробней, как подцепиться к дебагу клиента. Петр вроде написал, но у меня не получилось, может какая то последовательность должна быть. Еще как включить DEV? Что сделал, скопировал архив в созданные папки в клиенте, как описанно выше, настроил ремот дебага в шарме. И вот дальше не коннект :( P.S. Разобрался с дебагером, оказалось что Петр чуть не правильно путь написал, по которому нужно закинуть содержимое архива, у меня он оказался \World_of_Tanks\res_bw\scripts\common\pydev\pycharm\pydev\ теперь работает. По включению режима DEV вопрос открыт. Edited August 13, 2016 by akey 2 @ Quote Link to comment Short link Share on other sites More sharing options...
Yozki Posted September 22, 2016 Share Posted September 22, 2016 (edited) wotres и wotswf, и они импортированы как зависимости. Это исходники клиента python и as3 из lobby/battle. Каждый под управлением git, А на ГитХабе вот этот репозиторий, любопытно, актуален? увы, Latest commit 9ffb090 on 15 Nov 2013 Этот процесс долгий, но требуется один раз - в итоге получаются lobby.swc и battle.swc, готовые для подключения как внешние библиотеки.похоже, быстро въехать в тему не получится, а клянчить готовый архив с зависимостями каждое обновление клиента - путь тупиковый. Экспорт их на Гитхаб может быть полезен. Edited September 22, 2016 by Yozki @ Quote Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted September 22, 2016 Share Posted September 22, 2016 А на ГитХабе вот этот репозиторий, любопытно, актуален? увы, Latest commit 9ffb090 on 15 Nov 2013 https://bitbucket.org/XVM/wargaming.wot.scripts 2 @ Quote Link to comment Short link Share on other sites More sharing options...
akey Posted September 22, 2016 Share Posted September 22, 2016 https://bitbucket.org/XVM/wargaming.wot.scripts 2016-07-28 последнее обновление сей репозитории... Тоже не актуально... @ Quote Link to comment Short link Share on other sites More sharing options...
Yozki Posted September 24, 2016 Share Posted September 24, 2016 2016-07-28 последнее обновление сей репозитории... Тоже не актуально... а я-то радостно скачал и ищу зависимости от варгамингового кода, а они может, уже и неверны :) Похоже, стоит подумать как автоматизировать декомпиляцию при обновках. @ Quote Link to comment Short link Share on other sites More sharing options...
IzeBerg Posted September 24, 2016 Share Posted September 24, 2016 (edited) 2016-07-28 последнее обновление сей репозитории... Тоже не актуально... Еще как актуальный. Актуальность не по дате смотри, а тексты коммитов почитай и вспомни когда и какой был последний микропатч. При каждом мелкопатчике на 3.5 обновленных файла нет смысла делать новый коммит. В прочем, все равно своим пользуюсь. Edited September 24, 2016 by IzeBerg 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.