XFW Python

Заголовок модификации

Заголовок является обязательным элементом Python-мода на основе XVM Framework.

Заголовок содержит такую информацию о моде, как:

  • версия модификации;
  • URL сайта разработчика;
  • URL для обновлений;
  • протестированные версии игры.

Если текущая версия игры у игрока не входит в число протестированных, то в логе появится сообщение о том, что версия модификации устарела, и будет предложено перейти по ссылке для установки обновления.

Заголовок должен находиться в файле __init__.py в каталоге /res_mods/mods/package/<mod_name>/python/

Пример заголовка:

### Заголовок XFW Framework
XFW_MOD_INFO = {
  # все поля - обязательны
  'VERSION':       '0.0.1',                     # версия модификации
  'URL':           'http://example.com',        # сайт модификации
  'UPDATE_URL':    'http://example.com/update', # ссылка с обновлениями
  'GAME_VERSIONS': ['0.9.7','0.9.8'],           # протестированные версии игры
}
###

###Ваш код здесь###

Импорт XFW и модификаций

Для подключения XVM Framework достаточно использовать

from xfw import *

Для подключения другой XFW-модификации используется конструкция вида [имя_модификации].python

Например, для импорта logger из модификации xvm_main, необходимо использовать:

from xvm_main.python.logger import *

Импорт сторонних библиотек

Для импорта сторонних библиотек используйте

from import_name import *

или же

import import_name

Список доступных библиотек:

Имя Описание Версия Импорты
JSONx Работа с файлами формата JSONx. n/a JSONx, JSONxLoader
dpath Работа со словарями в стиле XPath. 1.3.3 dpath
fs Предоставление интерфейса к различным файловым системам. 0.5.0 fs
simplejson Работа с файлами формата JSON. 3.4.0 simplejson
tlslite Реализация SSL и TLS в Python. 0.4.9 tlslite
pika Клиент для протокола AMQP 0-9-1. 0.10.0 pika
six Слой совместимости между Python2 и Python3. 1.8.0 six
ssl Обертка для SSL с использованием tlslite n/a ssl

Переопределение методов

Переопределение методов выполняется с помощью конструкции

@overrideMethod(class_name, 'method_name')
def overriding_method():
    your_code_here

Например, чтобы переопределить IntroPage._IntroPage__showMovie(), нужно использовать

@overrideMethod(IntroPage, '_IntroPage__showMovie')
def IntroPage_showMovie(base, self, movie):
    BigWorld.callback(0, self.stopVideo)
    return base(self, movie)

Регистрация событий

Регистрация событий выполняется с помощью конструкции

@registerEvent(class_name, 'method_name', [prepend])
def registered_event():
    your_code_here

Третий, опциональный аргумент prepend указывает на очередность выполнения:

  • false - (по умолчанию) registered_event() выполнится после method_name();
  • true - registered_event() выполнится до method_name().

Например, для выполнения своего метода после того, как в свою очреедь выполнится LoginView.onSetOptions(), необходимо сделать:

@registerEvent(LoginView, 'onSetOptions')
def LoginView_onSetOptions(self, optionsList, host):
    global firsttime
    if firsttime:
        firsttime = False
        if config.get('login/autologin'):
            BigWorld.callback(0, self.onDoAutoLogin)