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

Как сделать свой мод на XFW

Рекомендуемые сообщения

С чего начать днищу, которое никогда не делало моды, но хочет сделать с XFW?

 

Например идея для мода такая:

 

Когда бой закончился автоматически создаётся канал чата. Все кто был в бою попадают в этот канал. Типа канал послебоевого чата.

 

Потом если уходишь в новый бой то сразу покидаешь такой канал старого боя.

 

Дискасс!))

  • Нравится 4
  • Не нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сначала надо найти точку входа - метод, который вызывается в нужный тебе момент. Затем вешаешь на него событие через @registerEvent, или переопределяешь метод через @overrideMethod, в зависимости от того, нужно ли тебе менять поведение оригинального метода, или достаточно просто выполнить по событию свой код.

Далее уже делаешь реализацию своей логики.

В качестве примеров лучше всего смотреть на готовые реализации тут.

Например, autologon:

 

Обязательный блок с информацией о моде

""" XVM (c) www.modxvm.com 2013-2015 """
#####################################################################
# MOD INFO
XFW_MOD_INFO = {
    # mandatory
    'VERSION':       '3.1.0',
    'URL':           'http://www.modxvm.com/',
    'UPDATE_URL':    'http://www.modxvm.com/en/download-xvm/',
    'GAME_VERSIONS': ['0.9.9','0.9.10'],
    # optional
}
#####################################################################
imports

# imports
import traceback
import BigWorld

from gui.Scaleform.daapi.view.IntroPage import IntroPage

from gui.Scaleform.daapi.view.login import LoginView
from xfw import *
from xvm_main.python.logger import *

import xvm_main.python.config as config


Далее идут обработчики событий:

 

1. переопределяем метод IntroPage._IntroPage__showMovie - метод вызывается при начале проигрывания вступительной заставки. В нем мы проверяем опцию конфига 'login/skipIntro', и останавливаем видео при значении True

первый аргумент - ссылка на оригинальный метод

firsttime = True
@overrideMethod(IntroPage, '_IntroPage__showMovie')
def IntroPage_showMovie(base, self, movie):
    if config.get('login/skipIntro'):
        BigWorld.callback(0, self.stopVideo)
    return base(self, movie)
2. вешаем событие на метод LoginView.onSetOptions. Событие вызывается после вызова метода, так как аргумент декоратора prepend не указан, и равен по умолчанию False. В этом методе мы проверяем опцию 'login/autologin', и делаем автологин, если она установлена.

@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)
3. переопределяем метод LoginView.as_setVersionS, в нем мы дописываем версию XVM к версии WoT на экране логина.

@overrideMethod(LoginView, 'as_setVersionS')
def LoginView_as_setVersionS(base, self, version):
    base(self, '{} | XVM {} (WoT {})'.format(version, config.get('__xvmVersion'), config.get('__wotVersion')))
  • Нравится 13
  • Не нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

sirmax, напиши еще как правильно скачать XFW и откуда.

Изменено пользователем StranikS_Scan
  • Нравится 2
  • Не нравится 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Репозиторий xfw: https://bitbucket.org/XVM/xfw

Уже собранный можно скачать из ночников (колонка XFW), или же создать свой репозиторий на Bitbucket, и к нему подключить XFW как подрепозиторий, как это сделано в XVM. Из ночников проще, но обновлять надо будет вручную. Через сабрепу более удобно, но нужно будет настроить среду для компиляции (дока для XVM, для XFW нужно несколько ее переделать).

  • Нравится 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дождались!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как найти точку входа? Существует ли список методов с описаниями?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как найти точку входа? Существует ли список методов с описаниями?

 

Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

Как найти точку входа? Существует ли список методов с описаниями?

https://bitbucket.org/XVM/xfw.hello_world

http://xfw.readthedocs.io/ru/latest/index.html

Изменено пользователем TwoPizza

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать.

А как же быть если в примерах никто нужный мне метод не юзал?

 

Спасибо. Инфу по обеим ссылкам уже детально изучил. Но так и не нашел ответ на свой вопрос.

 

Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата?

1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано.

Довольно быстро находится класс ClientChat, в котором есть необходимые методы.

 

2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно:

  1. выход в ангар после завершения боя

  2. выход в ангар до завершения боя

  3. окончание боя, после выхода в ангар до завершения боя

в зависимости от этого, нужно искать подходящее событие, или метод.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(редактировалось)

1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано.

Довольно быстро находится класс ClientChat, в котором есть необходимые методы.

 

2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно:

  1. выход в ангар после завершения боя

  2. выход в ангар до завершения боя

  3. окончание боя, после выхода в ангар до завершения боя

в зависимости от этого, нужно искать подходящее событие, или метод.

Здорово. Спасибо!

И немного оффтопный вопрос. Реально ли настроить (переделать) XMQP под свой AMQP (RabbitMQ) сервер? В какую сторону копать?

Изменено пользователем STREJlA

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

День потратил, облазил ClientChat и кучу других исходников.

Так и не получилось вызвать окно чата, такое как создается при вызове контекстного меню -> отправить сообщение

Единственное что получилось найти - BigWorld.player().createPrivate() Однако это не то, что нужно.

И в орионе уже все, что можно изучил. Не понимаю где можно еще искать.

Подскажите плз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так и не получилось вызвать окно чата

ClientChat

BigWorld.player().createPrivate()

Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже.

Это намек на то, что двигаться нужно в направление gui?

Или же с actions script разбираться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это намек на то, что двигаться нужно в направление gui?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Добрался до \res\scripts\client\messenger\gui\Scaleform\channels

Может в этих дебрях чего найду...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Научился делать всё что угодно, кроме того, что нужно =(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Научился делать всё что угодно, кроме того, что нужно =(

Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-)

Смешно. Еще смешнее будет, когда я найду нужный метод и пойму, насколько все было элементарно.

 

А по факту спасайте - я уже реально всё, что можно попробовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я вряд ли смогу чем-то помочь, как раз все, что с чатом связано, я не изучал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×