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

Фото

Коллекция материалов по созданию модов


  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 08 Февраль 2017 - 17:20

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

 

А. Официальные доки

  1. Документация XVM Framework 3.1.0 Абсолютно must read, но, к сожалению, крайне кратко и, возможно, давно не обновлялось. Для сборки под Windows необходим пакет MSYS2, который не работает под Win XP.
  2. xfw.hello_world Пример мода на основе XFW. Полностью на ActionScript.

B. Питоновская сторона силы.

  1. Доки к BigWorld -- часть питоновских  библиотек, за которые моды цепляются в клиенте игры (via ktulho). Это документация от "чистого" BigWorld 2.1.0. Там нет методов, которые добавлены разработчиками танков. Еще часть может отсутствовать.(thx 2 Monstrofil)
  2. Декомпилированные питоновские исходники из клиента игры (via ktulho). Там же инструмент (PjOrion от StranikS_Scan) и инструкции по декомпиляции. 
  3. Как я забыл скомпилировать питоновские файлы.  Заодно там ссылка на проект hello world для ангара. Чтобы моды запустились, достаточно поместить .pyc файл в папку scripts/client/gui/mods и название файла должно начинаться с mod_

C. Разное

  1. Создание Flash объектов и управление ими. Основы DAAPI. Про интероп между Питоном и AS. Требует минимального знакомства с обеими языками.
  2. Немного про среду для разработки модов Обсуждение IntelliJ IDEA, PyCharm, более легкие альтернативы. Рекомендации по настройке режима отладки.
  3. Как создать форму(Окно) в ангаре.  Питоновский файл складывать в res_mods\<wot_ver>\scripts/client/gui/mod, swf файл складывать в res_mods\<wot_ver>\gui\flash\
  4. Интеграция своего sfw файла в battle.sfw в патче 9.15.1

Всякое

  • В FlashDevelop файл с точкой входа для компилятора должен быть документом (ПКМ).
  • При редактировании питоновских проектов удобно скачать декомпилированные питоновские исходники (Питоновская сторона силы. - 2) и сделать их external lib. Это даст подсказку и исправление опечаток в IDE.

Изменено: John_Nash, 16 Февраль 2017 - 06:28

  • 7

#2 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 09 Февраль 2017 - 07:25

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

*******

 

BigWorld - это built-in модуль движка (как и GUI, Math, ResMgr, _Scaleform и может что-то еще), по сути это API для связи Python <---> Движок

 

В контексе флеша - BigWorld'а нет, флэш работает исключительно внутри Scaleform, который раскрыт в питоне модулем _Scaleform (смотрим scripts/client/gui/Scaleform/Flash.py)

 

Если непонятно, то Scaleform это аналог Adobe Flash Player, имеет свой движок и набор базовый AS3-классов для построения интерфейса (как у Flash есть Flex). Кроме того, Wargaming создал свой набор классов для построения интерфейса игры - окна, кнопки и т.д. (это как Spark у Flex). Вот эти два набора нам и нужны для успешного собирания своих флешек, неймспейсы scaleform.click, scaleform.net (это классы Scaleform) и net.wg.* (это классы Wargaming). lobby.swf содержит наиболее полный набор классов для лобби, поэтому берем его, и battle.swf для боя.

 

 

[Про питоновские скрипты]

В 9.10 добавили модлоадер, Чтобы моды запустились, достаточно поместить мод в папку scripts/client/gui/mods и название файла должно начинаться с mod_.

 

Если поставить в constants флаг IS_DEVELOPMENT на True, то будут грузится некомпилированные моды (*.py) с той-же маской имени.

 

Появилось некоторые методы, которые клиент вызывает у мода, например: init, fini, onAccountShowGUI... И в таком духе, найти их можно поиском в исходниках слова guiModsSendEvent или sendEvent. Чтобы они вызывались достаточно создать метод с соответствующим названием в моде.


Изменено: John_Nash, 15 Февраль 2017 - 11:31

  • 4

#3 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 16 Февраль 2017 - 08:23

mod_TestWindow.py изменим

def __init__(self):
    super(TestWindow, self).__init__()
    self.__config_section = ResMgr.openSection('../configs/config.xml')
и добавим метод
def py_getCustomConfig(self):
    return {
        'title': self.__config_section.readString('title'),
        'width': self.__config_section.readInt('width'),
        'height': self.__config_section.readInt('height')
    }
В TestWindow.as добавим
public var py_getCustomConfig : Function;
И изменим:
override protected function onPopulate() : void
{
    super.onPopulate();
    var _config : Object = py_getCustomConfig();
    width = _config.width;
    height = _config.height;
    window.title = _config.title;
}
Теперь проверим как это работает:
Создадим в папке res_mods/configs файл config.xml (кодировка UTF-8 (без BOM))
Содержимое файла:
<root>
    <title>Test Window</title>
    <width>600</width>
    <height>400</height>
</root>


Изменено: John_Nash, 16 Февраль 2017 - 08:33

  • 3

#4 Slava7572

Slava7572
  • Premium Member
  • 4 918 сообщений
  • Nick:Slava7572
  • WoT Server:RU (Русский)
  • Город: Мариуполь,Украина

Опубликовано 16 Февраль 2017 - 13:11

Спасибо за топик,я уверен,что многим это интересно.


  • -1





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13