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

Фото

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


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

#1 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 23 Сентябрь 2015 - 16:32

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

 

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

 

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

 

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

 

Дискасс!))


  • 3

#2 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Team
  • 12 766 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 23 Сентябрь 2015 - 17:02

Сначала надо найти точку входа - метод, который вызывается в нужный тебе момент. Затем вешаешь на него событие через @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')))

  • 12

#3 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 798 сообщений
  • WoT Server:RU (Русский)

Опубликовано 23 Сентябрь 2015 - 19:43

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


Изменено: StranikS_Scan, 23 Сентябрь 2015 - 19:44

  • 0

#4 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Team
  • 12 766 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 23 Сентябрь 2015 - 20:36

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

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


  • 2

#5 kharlashkin

kharlashkin
  • Пользователь
  • 768 сообщений
  • Nick:kharlashkin
  • Город: Северодонецк

Опубликовано 24 Сентябрь 2015 - 17:48

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


  • 0

#6 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 08 Октябрь 2016 - 22:29

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


  • 0

#7 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 798 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Октябрь 2016 - 22:38

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

 

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


  • 0

#8 Yupi

Yupi
  • Пользователь
  • 2 454 сообщений

Опубликовано 08 Октябрь 2016 - 22:43

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

https://bitbucket.or...xfw.hello_world

http://xfw.readthedo...test/index.html


Изменено: TwoPizza, 08 Октябрь 2016 - 22:44

  • 0

#9 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 08 Октябрь 2016 - 22:56

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

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

 

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

 

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


  • 0

#10 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Team
  • 12 766 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 08 Октябрь 2016 - 23:21

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

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

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

 

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

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

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

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

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


  • 0

#11 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 08 Октябрь 2016 - 23:27

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

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

 

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

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

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

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

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

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

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


Изменено: STREJlA, 08 Октябрь 2016 - 23:27

  • 0

#12 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 10 Октябрь 2016 - 20:59

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

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

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

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

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


  • 0

#13 GPCracker

GPCracker

    Piranhas Team

  • Пользователь
  • 2 145 сообщений
  • WoT Server:RU (Русский)
  • Город: Москва

Опубликовано 10 Октябрь 2016 - 21:14

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

ClientChat

BigWorld.player().createPrivate()

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

#14 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 10 Октябрь 2016 - 21:25

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

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

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


  • 0

#15 GPCracker

GPCracker

    Piranhas Team

  • Пользователь
  • 2 145 сообщений
  • WoT Server:RU (Русский)
  • Город: Москва

Опубликовано 10 Октябрь 2016 - 21:48

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

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

#16 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 10 Октябрь 2016 - 22:02

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

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

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


  • 0

#17 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 13 Октябрь 2016 - 18:51

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


  • 0

#18 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Team
  • 12 766 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 13 Октябрь 2016 - 19:31

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

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


  • 0

#19 STREJlA

STREJlA
  • Пользователь
  • 18 сообщений
  • Nick:STREJlA
  • WoT Server:RU (Русский)

Опубликовано 13 Октябрь 2016 - 19:33

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

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

 

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


  • 0

#20 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Team
  • 12 766 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 13 Октябрь 2016 - 19:40

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


  • 0





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

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

© Mr 13