Jump to content
Korean Random
aks1983

Немного про среду для разработки модов

Recommended Posts

К сожалению, Wargaming не предоставляет документации или API по интеграции с движком, поэтому основное время уходит на реверс-инжениринг (что является юридически  спорным). Понять логику работы кода будет проще, если настроить в IDE code hinting и гулять по коду, как по гиперссылкам.

 

Здесь я бы хотел поделиться своим опытом по созданию удобного окружения для разработки и автоматизации сборки модов.

 

В качестве среды разработки я использую IntelliJ IDEA с плагинами python, flex, ant. Сборку осуществляю в ней же. Как правило мод представляет собой проект с несколькими модулями - flex и python:

post-37520-0-51152900-1470221305.png

Пара внешних модулей есть в каждом проекте - это 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, автоимпорт и обнаружение ошибок, а так же можно легко гулять по коду клиента и исследовать его.

post-37520-0-06192300-1470222091_thumb.png

post-37520-0-66139000-1470221309_thumb.png

 

Про сборку мода. Флеш можно собирать в IDEA, однако, чтобы одной командой собирать все флешки и .pyc, копировать их в клиент вместе с прочими ресурсами и собирать .zip архив, я использую Apache Ant. Ничего хитрого нет, просто один раз сделал и пользуюсь.

post-37520-0-98969200-1470221300_thumb.png

Чтобы подключаться в рантайме, я использую этот проект - https://github.com/juho-p/wot-debugserver, в принципе удобно просматривать внутренние структуры через автокомплит по TAB и выполнять какие-нибудь действия для тестов. Так же пробовал для отладки pydev.egg из pycharm, но есть нюансы.

Edited by aks1983
  • Upvote 6

Share this post


Link to post

Short link
Share on other sites

Привет, расскажу немного о тех инструментах которые использую я:

 

Для разработки я использую IDE JetBrains PyCharm

post-6927-0-15688900-1470235996_thumb.png

 

Это полноценная IDE, исходники клиента я разбираю с использованием pjOrion+uncompyle6

Главное чтобы имена файлов были в верном регистре, чтобы нормально отрабатывал авто-импорт модулей.

post-6927-0-54072400-1470236042_thumb.png

 

В клиенте танков есть встроенный remote debug, по умолчанию настроенный на Pycharm, но никто не запрещает подключатся к нему из другой IDE

достаточно закинуть содержимое архива pycharm-debug.egg из дистрибутив pycharm в папку \World_of_Tanks\res_mods\<версия>\scripts\common\pydev\pycharm\pydev

и вписать в свой скрипт

import bwpydevd

bwpydevd.startDebug()

главное следите чтобы скрипты были идентичны

post-6927-0-86666100-1470236093_thumb.png

 

В работе очень сильно помогает встроенный инспектор кода alt+shift+i, который подскажет как правильно оформить код по pep8, где есть ошибки(с подробностями) и даст другие рекомендации, ну и так же по запросу может переформатировать код и оптимизировать импорты, опять же в соответствии с рекомендациями pep8, за что я его особенно люблю.

post-6927-0-33054200-1470236062_thumb.png

 

После того как код написан, проверен и прошёл debug в клиенте, я буквально парой кликов заливаю код на GitHub

post-6927-0-43518600-1470236107_thumb.png

 

Выбор IDE дело вкуса, например мой знакомый кодит в Visual Studio, использует так же встроенный дебаг, только с дистрибутивом от своей IDE.

А ещё один знакомый использует Eclipse

 

Удачи всем )

Edited by spoter
  • Upvote 9

Share this post


Link to post

Short link
Share on other sites

Тема закреплена.

 

@spoter, пожалуйста, перезалейте картинки прямо на форум (и всегда заливайте их только так). На стороннем хостинге они будут автоматически удалены спустя некоторое время.

Share this post


Link to post

Short link
Share on other sites
В клиенте танков есть встроенный remote debug, по умолчанию настроенный на Pycharm, но никто не запрещает подключатся к нему из другой IDE

достаточно закинуть содержимое архива pycharm-debug.egg из дистрибутив pycharm в папку \World_of_Tanks\res_bw\scripts\common\pydev\pycharm\

и вписать в свой скрипт

import bwpydevd

bwpydevd.startDebug()

главное следите чтобы скрипты были идентичны

 

По этому поводу есть несколько замечаний:

  1. Распаковывать egg-архив можно в любую директорию из sys.path
  2. Скомпилировать, python -m compileall [path_to_extracted]
  3. Брекпоинты в декомпилированных скриптах работать не будут (или будут работать неправильно), т.к. другие номера строк
  4. Чтобы имена файлов были идентичны, можно декомпилированные скрипты прогнать через такой 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 by aks1983
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

По этому поводу есть несколько замечаний:

  • Распаковывать 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 меня покорил с первого запуска, не жалею ничуть что перешёл на него.

Меня вон Юша криворуким кодером называет. Потому что видел старый мой код.

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

Это сейчас у меня код становится лучше, по прошествии двух лет,с тех пор как я вообще кодить на питоне начал.

Хотя по факту я все ещё джуниор питонист без нормального образования и со специфическим опытом. :)

Но главное что нравится кодить, и это всё перевешивает.

  • Upvote 4
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

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

Это с чего бы?

Я думаю, что наооборот все начнут ленится и писать код внутри исходников.

Никакой совместимости модов точно не будет.

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Sublime Text 3 с немного переделанным WoT Script Terminal и самописным плагином для сборки (в том числе flash-частей) и подключения модов в пару кликов. Adobe Animate + FlashDevelop для специфичкских задач с флэшем. И SmartGit для контроля версий.

Этого добра за глаза хватает.

Edited by IzeBerg

Share this post


Link to post

Short link
Share on other sites

Sublime Text 3

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

А текстовый редактор полюбому нужен. Тем более что у ST вполне нормальная подсветка синтаксиса. NPP тоже норм, но кодить лично мне как-то больше приятнее в ST, да и плагины на Python к нему не могут не радовать - можно писать самому.

При наличии гугла под рукой и мозгов ST без проблем апгрейдится до уровня IDE при помощи тех же плагинов. Например, подсветка ошибок в коде, PyLinter или как-то так пакет называется. Да, кстати, пакетная система - тоже вещь.

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

Я один использую Notepad++ с Орионом?

Орион в тему, если нужно что-то декомпилить, или разбирать. Или наоборот, старательно упаковывать. Код удобнее редактировать в том же ST. Раньше использовал отладчик, потом написал WST, чтобы копипастом не страдать.

Про NPP уже написал выше. Для Python-разработчика ST более интересный экземпляр. Тоже привыкал к последнему некоторое время, но оно того стоит.

Хотя по факту я все ещё джуниор питонист без нормального образования и со специфическим опытом. :)

Да тут у большинства мододелов такое состояние... Я тоже не программист не разу, вообще на инженера-схемотехника учусь :)

Я думаю, что наооборот все начнут ленится и писать код внутри исходников.

Так и сейчас никто не запрещает особо так делать. Этим в основном на еврофоруме страдают. Всем местным "старики" доходчиво объясняют, что так делать неправильно.

А вот комментарии, которые удаляются при компиляции - будут очень даже кстати. Там их весьма приличное количество, судя по номерам строк в трейсах и положением методов в декомпилах.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Привет, расскажу немного о тех инструментах которые использую я:

 

Для разработки я использую IDE JetBrains PyCharm

 

 

 

При наличии гугла под рукой и мозгов ST без проблем апгрейдится до уровня IDE при помощи тех же плагинов. Например, подсветка ошибок в коде, PyLinter или как-то так пакет называется. Да, кстати, пакетная система - тоже вещь.

 

 

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

Хочу попробовать настроить ST3 и PyCharm, выявить предпочтения для себя. Заранее спасибо!

Share this post


Link to post

Short link
Share on other sites

Хочу попробовать настроить ST3

Темы само собой на твой вкус и цвет.

Из плагинов у меня стоит BracketHighlighter (подсветка скобок), FileDiffs (дифф между двумя файлами, да, ST3 умеет правильно раскрашивать диффы от рождения), JSONLint (подсветка синтаксиса JSON, поиск ошибок), Package Control, само собой, Show Character Code (мелкий плагин, показывает код символа), TrailingSpaces (подсветка и удаление ненужных пробелов в конце строки), ну и WoTScriptTerminal. Больше каких-то особых потребностей пока не возникало.

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

Ну и само собой русский и английский словари, для проверки орфографии, если конечно не хочешь клепать кучу опечаток и орфографических ошибок.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

настроить ST3

Ну и само собой русский и английский словари, для проверки орфографии, если конечно не хочешь клепать кучу опечаток и орфографических ошибок.

как "не программист", поставил под винду еще несколько плагинов (он-лайн переводчик от яндекса, ColorHighlighter, автозавершение и подсветка тэгов, добавил язык json (wot) для конфигов - удобно подсвечивает макросы и вложенный html-код)

post-24956-0-15270300-1471005955_thumb.jpg

 

 

FileDiffs (дифф между двумя файлами, да, ST3 умеет правильно раскрашивать диффы от рождения)
у меня антивирь ругался на него! заменил на Compare Side-By-Side

Share this post


Link to post

Short link
Share on other sites

у меня антивирь ругался на него! заменил на Compare Side-By-Side

заменил бы антивирь)

Что-то я не вижу того, на что мог бы ругаться нормальный антивирь https://github.com/colinta/SublimeFileDiffs

Если антивирь ругается на Popen, то может стоит снизить его параноидальность?

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

SublimeCodeIntel

Тоже на линуксе такое ставил. В разработке модов он не особо полезен, а вот при написании чего-то чисто под питон - довольно прикольная штука.

у меня антивирь ругался на него! заменил на Compare Side-By-Side

Странно.. И что же ему не понравилось, интересно? Там же все сорцами прямо распространяется, просто в архив упаковывается. Обычный зип архив.

заменил бы антивирь)

Ага. На рубоарде есть тулза на вечный триал для касперского, KRT кажется называется, но тема видна только зареганным пользователям, раз в месяц двухминутная процедура и все, полный функционал, о обновлениями все ок. На тот же нод куча ключей в инете валяется.

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

Share this post


Link to post

Short link
Share on other sites

Попробовал PyCharm интересная штука оказалась, подсказки по коду действительно прикольная штука :)

Spoter, или может кто знает еще, по подробней, как подцепиться к дебагу клиента. Петр вроде написал, но у меня не получилось, может какая то последовательность должна быть. Еще как включить DEV?

Что сделал, скопировал архив в созданные папки в клиенте, как описанно выше, настроил ремот дебага в шарме. И вот дальше не коннект :(

 

P.S. Разобрался с дебагером, оказалось что Петр чуть не правильно путь написал, по которому нужно закинуть содержимое архива, у меня он оказался

\World_of_Tanks\res_bw\scripts\common\pydev\pycharm\pydev\

теперь работает.

 

По включению режима DEV вопрос открыт.

Edited by akey
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

wotres и wotswf, и они импортированы как зависимости. Это исходники клиента python и as3 из lobby/battle. Каждый под управлением git,

 

А на ГитХабе вот этот репозиторий, любопытно, актуален? 

увы, 

Latest commit 9ffb090  on 15 Nov 2013 

Этот процесс долгий, но требуется один раз - в итоге получаются lobby.swc и battle.swc, готовые для подключения как внешние библиотеки.

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

Экспорт их на Гитхаб может быть полезен.

Edited by Yozki

Share this post


Link to post

Short link
Share on other sites

2016-07-28 последнее обновление сей репозитории... Тоже не актуально...

а я-то радостно скачал и ищу зависимости от варгамингового кода, а они может, уже и неверны :)

Похоже, стоит подумать как автоматизировать декомпиляцию при обновках.

Share this post


Link to post

Short link
Share on other sites

2016-07-28 последнее обновление сей репозитории... Тоже не актуально...

Еще как актуальный. Актуальность не по дате смотри, а тексты коммитов почитай и вспомни когда и какой был последний микропатч. При каждом мелкопатчике на 3.5 обновленных файла нет смысла делать новый коммит. В прочем, все равно своим пользуюсь.

Edited by IzeBerg
  • 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...