Yupi Posted September 23, 2015 Share Posted September 23, 2015 (edited) С чего начать днищу, которое никогда не делало моды, но хочет сделать с XFW? Например идея для мода такая: Когда бой закончился автоматически создаётся канал чата. Все кто был в бою попадают в этот канал. Типа канал послебоевого чата. Потом если уходишь в новый бой то сразу покидаешь такой канал старого боя. Дискасс!)) Edited October 1, 2019 by Mixaill 5 1 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted September 23, 2015 Share 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 Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted September 23, 2015 Share Posted September 23, 2015 (edited) sirmax, напиши еще как правильно скачать XFW и откуда. Edited September 23, 2015 by StranikS_Scan 2 2 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted September 23, 2015 Share Posted September 23, 2015 Репозиторий xfw: https://bitbucket.org/XVM/xfw Уже собранный можно скачать из ночников (колонка XFW), или же создать свой репозиторий на Bitbucket, и к нему подключить XFW как подрепозиторий, как это сделано в XVM. Из ночников проще, но обновлять надо будет вручную. Через сабрепу более удобно, но нужно будет настроить среду для компиляции (дока для XVM, для XFW нужно несколько ее переделать). 2 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 24, 2015 Share Posted September 24, 2015 Дождались!!! @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 8, 2016 Share Posted October 8, 2016 Как найти точку входа? Существует ли список методов с описаниями? @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted October 8, 2016 Share Posted October 8, 2016 Как найти точку входа? Существует ли список методов с описаниями? Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать. @ Quote Link to comment Short link Share on other sites More sharing options...
Yupi Posted October 8, 2016 Author Share 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 Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 8, 2016 Share Posted October 8, 2016 Это питон, там рулят импорты, эвенты и хуки. Достаточно изучить исходники в репозитарии на предметов, какие модули можно импортировать и что в них есть. К каким эвентам можно цепляться. И какие полезные методы можно хукать. А как же быть если в примерах никто нужный мне метод не юзал? https://bitbucket.org/XVM/xfw.hello_world http://xfw.readthedocs.io/ru/latest/index.html Спасибо. Инфу по обеим ссылкам уже детально изучил. Но так и не нашел ответ на свой вопрос. Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата? 1 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted October 8, 2016 Share Posted October 8, 2016 Возьмем задачу которую описал ТС. Где искать модуль который отвечает за работу чата? 1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано. Довольно быстро находится класс ClientChat, в котором есть необходимые методы. 2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно: 1. выход в ангар после завершения боя 2. выход в ангар до завершения боя 3. окончание боя, после выхода в ангар до завершения боя в зависимости от этого, нужно искать подходящее событие, или метод. @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 8, 2016 Share Posted October 8, 2016 (edited) 1. Поиск по слову "messenger" в декомпилированных исходниках, и дальнейшее изучение того, как это реализовано. Довольно быстро находится класс ClientChat, в котором есть необходимые методы. 2. К entrypoint это никак не относится, тут точка входа должна быть по окончании боя. Тут уже есть несколько вариантов, надо для начала определить что нам нужно: 1. выход в ангар после завершения боя 2. выход в ангар до завершения боя 3. окончание боя, после выхода в ангар до завершения боя в зависимости от этого, нужно искать подходящее событие, или метод. Здорово. Спасибо! И немного оффтопный вопрос. Реально ли настроить (переделать) XMQP под свой AMQP (RabbitMQ) сервер? В какую сторону копать? Edited October 8, 2016 by STREJlA @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 10, 2016 Share Posted October 10, 2016 День потратил, облазил ClientChat и кучу других исходников. Так и не получилось вызвать окно чата, такое как создается при вызове контекстного меню -> отправить сообщение Единственное что получилось найти - BigWorld.player().createPrivate() Однако это не то, что нужно. И в орионе уже все, что можно изучил. Не понимаю где можно еще искать. Подскажите плз. @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted October 10, 2016 Share Posted October 10, 2016 Так и не получилось вызвать окно чата ClientChat BigWorld.player().createPrivate()Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже. @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 10, 2016 Share Posted October 10, 2016 Абсолютно не там ищешь, если тебе нужно окно. Этот модуль отвечает за низкоуровневую обработку информации, а окно - это высокий уровень уже. Это намек на то, что двигаться нужно в направление gui? Или же с actions script разбираться? @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted October 10, 2016 Share Posted October 10, 2016 Это намек на то, что двигаться нужно в направление gui?Не, все через питон ходит все равно. В AS лезть смысла нет, если ты интерфейсы пилить не собираешься. А вот в обработчики заглянуть стоит. @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 10, 2016 Share Posted October 10, 2016 Не, все через питон ходит все равно. В AS лезть смысла нет, если ты интерфейсы пилить не собираешься. А вот в обработчики заглянуть стоит. Добрался до \res\scripts\client\messenger\gui\Scaleform\channels Может в этих дебрях чего найду... @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 13, 2016 Share Posted October 13, 2016 Научился делать всё что угодно, кроме того, что нужно =( @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted October 13, 2016 Share Posted October 13, 2016 Научился делать всё что угодно, кроме того, что нужно =( Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-) 1 @ Quote Link to comment Short link Share on other sites More sharing options...
STREJlA Posted October 13, 2016 Share Posted October 13, 2016 Ну это нормально. Мы тоже хотели сначала чат после боя сделать, а получился XVM... ;-) Смешно. Еще смешнее будет, когда я найду нужный метод и пойму, насколько все было элементарно. А по факту спасайте - я уже реально всё, что можно попробовал. @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted October 13, 2016 Share Posted October 13, 2016 Ну я вряд ли смогу чем-то помочь, как раз все, что с чатом связано, я не изучал. @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.