Jump to content
Korean Random
AntonVK

Проблема загрузки модов совместно с XVM в последнем патче.

Recommended Posts

Добрый день!

 

Достаточно продолжительное время поддерживаю мод

 

Каких-либо ярко выраженных проблем с модом никогда не было, но в рамках последних патчей начались не совсем понятные вещи.

 

Не так давно стали жаловаться пользователи PMOD, что у них, при определённой конфигурации PMOD, возникает артефакт в виде темного прямоугольника в боевом!!! интерфейсе игры в случае совместного использования с моими модами (здесь более подробные комментарии о проблеме и конфигурации PMOD http://forum.worldoftanks.ru/index.php?/topic/1241669-102x-часы-и-калькулятор-в-ангаре-с-конфигом/page__st__240#topmost).

 

Проблема так и не была решена.

 

И вот, в последнем актуальном патче мод перестал работать совместно с XVM. Пробовал ставить XVM, в логах python.log и xvm.log никаких, проясняющих данную ситуацию записей нет. Вроде как, согласно логам, мод загрузился, потом загрузился XVM и всё должно быть нормально. тем не менее, элементы моих модификаций в ангаре не отображаются.

 

При этом, на чистом клиенте, мои модификации работают.

 

К сожалению, я не располагаю большим ресурсом времени на доскональное изучение кода WG и не могу сам разобраться в проблеме. Также, я так и не понял, как сделать детальное логирование подгрузки модов, поэтому приходиться гадать почти вслепую.

 

Поэтому прошу помощи более компетентных мододелов и разработчиков XVM.

 

Как мне кажется, проблема заключается в методах инициализации и загрузки моих модификаций.

 

Сейчас я поступаю следующим образом

 

Python скрипт

#
import os
#
from gui.app_loader.loader import g_appLoader
from gui.Scaleform import SCALEFORM_SWF_PATH
from gui.Scaleform.Flash import Flash
from gui.Scaleform.framework import g_entitiesFactories, ViewSettings, ViewTypes, ScopeTemplates
from gui.Scaleform.framework.entities.abstract.AbstractViewMeta import AbstractViewMeta
from gui.Scaleform.framework.entities.View import View
from gui.Scaleform.framework.managers.loaders import SFViewLoadParams
from gui.shared import events

class hangarClock(View, AbstractViewMeta):

    def __init__(self):
        View.__init__(self)

    def _populate(self):
        View._populate(self)

    def _dispose(self):
        View._dispose(self)

    def py_log(self, text):
        print('[hangarClock]: %s' % text)

    def py_getWoTPath(self):
        __WoT__ = os.path.dirname(os.path.abspath(__file__))
        __WoT__ = __WoT__[0:__WoT__.rfind('scripts')]
        return __WoT__

_windowAlias = 'hangarClock'
_url = 'hangarClock.swf'
_type = ViewTypes.WINDOW
_event = None
_scope = ScopeTemplates.GLOBAL_SCOPE

_settings = ViewSettings(_windowAlias, hangarClock, _url, _type, _event, _scope)
g_entitiesFactories.addSettings(_settings)

old_init = Flash.__init__

def new_init(self, swf, className = 'Flash', args = None, path = SCALEFORM_SWF_PATH):
    old_init(self, swf, className, args, path)
    if swf == 'lobby.swf':
            self.addListener(events.AppLifeCycleEvent.INITIALIZED, lambda e: AppStarted(self, e))

Flash.__init__ = new_init

def AppStarted(self, event):
    g_appLoader.getApp().loadView(SFViewLoadParams(_windowAlias, _windowAlias))

 

Код AS3, в котором далее непосредственно вызывается код моей модификации

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import net.wg.gui.lobby.LobbyPage;
    import net.wg.infrastructure.base.AbstractView;
    import net.wg.infrastructure.events.LoaderEvent;
    import net.wg.infrastructure.interfaces.IView;

    public class hangarClock extends AbstractView {

        public function hangarClock() {
            super();
            this.init();
        }

        public var py_log:Function;
        public var py_getWoTPath:Function;

        private var lobby:LobbyPage = null;
        private var current_alias:String = "";

        private var zClock:hClock;

        private function init(param1:Event = null):void {
            if(!stage) {
                addEventListener(Event.ADDED_TO_STAGE,this.init);
                return;
            }
            removeEventListener(Event.ADDED_TO_STAGE,this.init);
            App.containerMgr.loader.addEventListener(LoaderEvent.VIEW_LOADED,this.onViewLoaded);
        }

        private function onViewLoaded(param1:LoaderEvent):void {
            this.processView(param1.view,false);
        }

        private function processView(param1:IView, param2:Boolean):void {
            var view:IView = param1;
            var populated:Boolean = param2;
            var _WoT_:String = py_getWoTPath();
            try {
                this.zClock = new hClock(_WoT_);
                this.current_alias = view.as_config.alias;
                if(this.current_alias == "lobby") {
                    this.lobby = view as LobbyPage;
                    this.lobby.header.addChild(this.zClock);
                    //py_log("is loaded");
                }
            }
            catch(error:Error) {
                py_log("processView" + error.getStackTrace());
            }
        }

        override protected function nextFrameAfterPopulateHandler():void {
            if(this.parent != App.instance) {
                (App.instance as MovieClip).addChild(this);
            }
            visible = false;
        }

    }

}

 

Компиляцию я осуществляю в Adobe Flash Professional, используя декомпилированный код WG из актуального XFW.

 

Если не затруднит, просьба прокомментировать:

  • является ли верным и актуальным на сегодняшний день вышеописанный метод инициализации и загрузки своих флэшек?
  • что такого произошло в последнем патче, что модификации перестали работать совместно с XVM, хотя раньше подобной проблемы не наблюдалось? Это какие-то кардинальные изменения самого XVM или кода WG?
  • каким образом ангарные моды могут соприкасаться с боевым интерфейсом?

 

Также, буду очень признателен, если укажите тынц, как можно организовать подробное логирование загрузки модов и вывода ошибок с небольшим примером.

 

Благодарю за внимание!
 

Share this post


Link to post

Short link
Share on other sites

кстати в этом патче проблема эта исчезла)))

Share this post


Link to post

Short link
Share on other sites
4 minutes ago, ЛОМ said:

кстати в этом патче проблема эта исчезла)))

 

Какая именно проблема имеется в виду?

Share this post


Link to post

Short link
Share on other sites
24 минуты назад, AntonVK сказал:

Не так давно стали жаловаться пользователи PMOD, что у них, при определённой конфигурации PMOD, возникает артефакт в виде темного прямоугольника в боевом!!!

вот эта проблема.

Share this post


Link to post

Short link
Share on other sites
Just now, ЛОМ said:

вот эта проблема.

 

Понял. Ну это скорее всего что-то в PMOD поменялось.

Share this post


Link to post

Short link
Share on other sites
6 минут назад, AntonVK сказал:

 

Понял. Ну это скорее всего что-то в PMOD поменялось.

ну да. он обновил свой мод и проблема исчезла. 

Share this post


Link to post

Short link
Share on other sites

Попробуйте

 

49 минут назад, AntonVK сказал:

    if swf == 'lobby.swf' or swf == 'xfw_lobby.swf' :             

        self.addListener(events.AppLifeCycleEvent.INITIALIZED, lambda e: AppStarted(self, e))

 

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
On 6/14/2018 at 3:55 PM, Mixaill said:

Попробуйте

 

 

 

Добрый день! Спасибо за ответ, не было возможности заниматься! попробую в ближайшее время, хотя уже очевидно, это должно помочь.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
On 6/14/2018 at 3:55 PM, Mixaill said:

Попробуйте

 

 

 

Михаил, ещё раз спасибо за помощь, совместно с XVM работает.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...