Yupi 504 Posted September 23, 2015 (edited) С чего начать днищу, которое никогда не делало моды, но хочет сделать с XFW? Например идея для мода такая: Когда бой закончился автоматически создаётся канал чата. Все кто был в бою попадают в этот канал. Типа канал послебоевого чата. Потом если уходишь в новый бой то сразу покидаешь такой канал старого боя. Дискасс!)) Edited October 1, 2019 by Mixaill 5 1 Quote Share this post Link to post Short link Share on other sites
sirmax 5,498 #293193 Posted September 23, 2015 Сначала надо найти точку входа - метод, который вызывается в нужный тебе момент. Затем вешаешь на него событие через @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 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,116 #293209 Posted September 23, 2015 (edited) sirmax, напиши еще как правильно скачать XFW и откуда. Edited September 23, 2015 by StranikS_Scan 2 2 Quote Share this post Link to post Short link Share on other sites
sirmax 5,498 #293216 Posted September 23, 2015 Репозиторий xfw: https://bitbucket.org/XVM/xfw Уже собранный можно скачать из ночников (колонка XFW), или же создать свой репозиторий на Bitbucket, и к нему подключить XFW как подрепозиторий, как это сделано в XVM. Из ночников проще, но обновлять надо будет вручную. Через сабрепу более удобно, но нужно будет настроить среду для компиляции (дока для XVM, для XFW нужно несколько ее переделать). 2 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #293309 Posted September 24, 2015 Дождались!!! Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #357741 Posted October 8, 2016 Как найти точку входа? Существует ли список методов с описаниями? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,116 #357744 Posted October 8, 2016 Как найти точку входа? Существует ли список методов с описаниями? Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать. Quote Share this post Link to post Short link Share on other sites
Yupi 504 #357747 Posted October 8, 2016 (edited) Как найти точку входа? Существует ли список методов с описаниями? https://bitbucket.org/XVM/xfw.hello_world http://xfw.readthedocs.io/ru/latest/index.html Edited October 8, 2016 by TwoPizza Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #357754 Posted October 8, 2016 Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать. А как же быть если в примерах никто нужный мне метод не юзал? https://bitbucket.org/XVM/xfw.hello_world http://xfw.readthedocs.io/ru/latest/index.html Спасибо. Инфу по обеим ссылкам уже детально изучил. Но так и не нашел ответ на свой вопрос. Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата? 1 Quote Share this post Link to post Short link Share on other sites
sirmax 5,498 #357763 Posted October 8, 2016 Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата? 1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано. Довольно быстро находится класс ClientChat, в котором есть необходимые методы. 2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно: 1. выход в ангар после завершения боя 2. выход в ангар до завершения боя 3. окончание боя, после выхода в ангар до завершения боя в зависимости от этого, нужно искать подходящее событие, или метод. Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #357770 Posted October 8, 2016 (edited) 1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано. Довольно быстро находится класс ClientChat, в котором есть необходимые методы. 2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно: 1. выход в ангар после завершения боя 2. выход в ангар до завершения боя 3. окончание боя, после выхода в ангар до завершения боя в зависимости от этого, нужно искать подходящее событие, или метод. Здорово. Спасибо! И немного оффтопный вопрос. Реально ли настроить (переделать) XMQP под свой AMQP (RabbitMQ) сервер? В какую сторону копать? Edited October 8, 2016 by STREJlA Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #358307 Posted October 10, 2016 День потратил, облазил ClientChat и кучу других исходников. Так и не получилось вызвать окно чата, такое как создается при вызове контекстного меню -> отправить сообщение Единственное что получилось найти - BigWorld.player().createPrivate() Однако это не то, что нужно. И в орионе уже все, что можно изучил. Не понимаю где можно еще искать. Подскажите плз. Quote Share this post Link to post Short link Share on other sites
GPCracker 2,087 #358317 Posted October 10, 2016 Так и не получилось вызвать окно чата ClientChat BigWorld.player().createPrivate()Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже. Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #358322 Posted October 10, 2016 Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже. Это намек на то, что двигаться нужно в направление gui? Или же с actions script разбираться? Quote Share this post Link to post Short link Share on other sites
GPCracker 2,087 #358328 Posted October 10, 2016 Это намек на то, что двигаться нужно в направление gui?Не, все через питон ходит все равно. В AS лезть смысла нет, если ты интерфейсы пилить не собираешься. А вот в обработчики заглянуть стоит. Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #358334 Posted October 10, 2016 Не, все через питон ходит все равно. В AS лезть смысла нет, если ты интерфейсы пилить не собираешься. А вот в обработчики заглянуть стоит. Добрался до \res\scripts\client\messenger\gui\Scaleform\channels Может в этих дебрях чего найду... Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #358982 Posted October 13, 2016 Научился делать всё что угодно, кроме того, что нужно =( Quote Share this post Link to post Short link Share on other sites
sirmax 5,498 #358992 Posted October 13, 2016 Научился делать всё что угодно, кроме того, что нужно =( Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-) 1 Quote Share this post Link to post Short link Share on other sites
STREJlA 0 #358993 Posted October 13, 2016 Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-) Смешно. Еще смешнее будет, когда я найду нужный метод и пойму, насколько все было элементарно. А по факту спасайте - я уже реально всё, что можно попробовал. Quote Share this post Link to post Short link Share on other sites
sirmax 5,498 #358995 Posted October 13, 2016 Ну я вряд ли смогу чем-то помочь, как раз все, что с чатом связано, я не изучал. Quote Share this post Link to post Short link Share on other sites