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)