Jump to content
Korean Random

AntonVK

User
  • Content Count

    135
  • Joined

  • Last visited

  • Days Won

    8

AntonVK last won the day on June 5

AntonVK had the most liked content!

Community Reputation

303 ⭐⭐⭐

1 Follower

About AntonVK

  • Birthday 05/27/1980

Basic information

  • Gender
    Мужчина

Contacts

  • Nick
    AntonVK

Recent Profile Visitors

3254 profile views
  1. Рабочая версия калькулятора Я ещё не закончил, но пользоваться можно AntonVK_HangarCalculator_1.5.0.0.wotmod Не собирается у меня флешка с подключёнными библиотеками, как и раньше. Пока приведу всё в порядок, потом попробую разобраться с этим механизмом.
  2. @Ekspoint Большое спасибо! Сегодня добрался проверить, теперь вызов работает нормально.
  3. Добрый день! Прошу помочь в следующем вопросе. До патча 1.5.х использовал в своем моде следующую конструкцию 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 from gui.app_loader.settings import APP_NAME_SPACE from gui.shared import g_eventBus, EVENT_BUS_SCOPE class hangarCalculatorButton(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('[hangarCalculatorButton]: %s' % text) def py_getWoTPath(self): __WoT__ = os.path.dirname(os.path.abspath(__file__)) __WoT__ = __WoT__[0:__WoT__.rfind('scripts')] return __WoT__ _windowAlias = 'hangarCalculatorButton' _url = 'hangarCalculatorButton.swf' _type = ViewTypes.WINDOW _event = None _scope = ScopeTemplates.GLOBAL_SCOPE _settings = ViewSettings(_windowAlias, hangarCalculatorButton, _url, _type, _event, _scope) g_entitiesFactories.addSettings(_settings) def new_afterCreate(self): old_afterCreate(self) self.addExternalCallback('hangarCalculatorButton.showCalculator', lambda name, alias: g_appLoader.getApp().loadView(SFViewLoadParams('hangarCalculator', 'hangarCalculator'))) old_afterCreate = Flash.afterCreate Flash.afterCreate = new_afterCreate def onAppInitialized(event): if event.ns == APP_NAME_SPACE.SF_LOBBY: app = g_appLoader.getApp(event.ns) if app: app.loadView(SFViewLoadParams(_windowAlias, _windowAlias)) g_eventBus.addListener(events.AppLifeCycleEvent.INITIALIZED, onAppInitialized, scope=EVENT_BUS_SCOPE.GLOBAL) AS3 (для кнопки вызова) package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.external.ExternalInterface; import net.wg.gui.lobby.LobbyPage; import net.wg.infrastructure.base.AbstractView; import net.wg.infrastructure.events.LoaderEvent; import net.wg.infrastructure.interfaces.IView; import scaleform.clik.events.ButtonEvent; public class hangarCalculatorButton extends AbstractView implements IhangarCalculatorButton { public function hangarCalculatorButton() { 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 zCalculatorButton:hCalculatorButton; 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.zCalculatorButton = new hCalculatorButton(_WoT_); this.current_alias = view.as_config.alias; this.zCalculatorButton.addEventListener(ButtonEvent.CLICK,this.onCalcBtnClick); if(this.current_alias == "lobby") { this.lobby = view as LobbyPage; this.lobby.header.addChild(this.zCalculatorButton); //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; } override protected function onDispose():void { this.zCalculatorButton.removeEventListener(MouseEvent.CLICK,this.onCalcBtnClick); } private function onCalcBtnClick(param1:ButtonEvent):void { var external:Array = new Array(); external.push(this.current_alias); external.unshift("hangarCalculatorButton.showCalculator","hangarCalculatorButton"); ExternalInterface.call.apply(null,external); } } } Эти две вещи между собой взаимодействовали и далее там уже вызывался собственный код. В результате, в ангаре кнопка, нажимаешь кнопку открывается окошко и всё как надо. В текущей версии игрового клиента мои попытки что-то исправить ни к чему не привели. Python исправил следующим образом: Python (для кнопки вызова) # import os # from gui.shared.personality import ServicesLocator from gui.Scaleform import SCALEFORM_SWF_PATH from gui.Scaleform.flash_wrapper 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 from gui.app_loader.settings import APP_NAME_SPACE from gui.shared import g_eventBus, EVENT_BUS_SCOPE class hangarCalculatorButton(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('[hangarCalculatorButton]: %s' % text) def py_getWoTPath(self): __WoT__ = os.path.dirname(os.path.abspath(__file__)) __WoT__ = __WoT__[0:__WoT__.rfind('scripts')] return __WoT__ _windowAlias = 'hangarCalculatorButton' _url = 'hangarCalculatorButton.swf' _type = ViewTypes.WINDOW _event = None _scope = ScopeTemplates.GLOBAL_SCOPE _settings = ViewSettings(_windowAlias, hangarCalculatorButton, _url, _type, _event, _scope) g_entitiesFactories.addSettings(_settings) def new_afterCreate(self): old_afterCreate(self) self.addExternalCallback('hangarCalculatorButton.showCalculator', lambda name, alias: ServicesLocator.appLoader.getApp().loadView(SFViewLoadParams('hangarCalculator', 'hangarCalculator'))) old_afterCreate = Flash.afterCreate Flash.afterCreate = new_afterCreate def onAppInitialized(event): if event.ns == APP_NAME_SPACE.SF_LOBBY: app = ServicesLocator.appLoader.getApp(event.ns) if app: app.loadView(SFViewLoadParams(_windowAlias, _windowAlias)) g_eventBus.addListener(events.AppLifeCycleEvent.INITIALIZED, onAppInitialized, scope=EVENT_BUS_SCOPE.GLOBAL) Python (для самого окна) # from gui.Scaleform import SCALEFORM_SWF_PATH from gui.Scaleform.daapi import LobbySubView from gui.Scaleform.daapi.view.meta.WindowViewMeta import * from gui.Scaleform.flash_wrapper import Flash from gui.Scaleform.framework import g_entitiesFactories, ViewSettings, ViewTypes, ScopeTemplates from gui.Scaleform.framework.entities.View import View from gui.shared import events LobbySubView.__background_alpha__ = 0 class hangarCalculator(LobbySubView, WindowViewMeta): def __init__(self): View.__init__(self) def _populate(self): View._populate(self) def _dispose(self): View._dispose(self) def onTryClosing(self): return True def onWindowClose(self): self.destroy() def py_log(self, text): print('[hangarCalculator]: %s' % text) _windowAlias = 'hangarCalculator' _url = 'hangarCalculator.swf' _type = ViewTypes.WINDOW _event = None _scope = ScopeTemplates.DEFAULT_SCOPE _settings = ViewSettings(_windowAlias, hangarCalculator, _url, _type, _event, _scope) g_entitiesFactories.addSettings(_settings) Ожидаемо, заменить только g_appLoader на ServicesLocator.appLoader.getApp() ничем не помогло в данном случае. Для AS3 код части, которая взаимодействует с Python, ничего не менял. Для кнопки код выше для окна вот (на всякий случай) package { import flash.display.MovieClip; import net.wg.infrastructure.base.AbstractWindowView; public class hangarCalculator extends AbstractWindowView { public function hangarCalculator() { super(); isCentered = true; } public var py_log: Function; private var zCalculator:hCalculator; override protected function onPopulate():void { super.onPopulate(); } override protected function onDispose():void { super.onDispose(); } override protected function configUI():void { try { super.configUI(); } catch(error:Error) { py_log("configUI " + error.getStackTrace()); } } } } Что в итоге, кнопка на месте, окно не вызывается. Буду признателен за помощь в решении проблемы. Спасибо!
  4. В Adobe Flash. Да с созданием флэш проблем нет. Сейчас проблема с вызовом окна калькулятора по кнопке.
  5. Спасибо, но есть нюансы. Я для компиляции использую исходники кода WG из XFW. Флэш вмешательства требовал крайне редко на самом деле и в фактически неизменном виде существовал очень давно, обычно ломались питон скрипты через патч. Часы сейчас рабочие, дошли руки заняться калькулятором. Ну и я хочу внести некоторые изменения. А вот библиотеки у меня не подключались из gui.pkg/gui/flash/swc, про это я знаю, хотя сейчас я думаю делаю тоже самое, только вместо swc файлов использую декомпилированные из набора XFW. В любом случае, имеет смысл попробовать снова подключить библиотеки, но вначале разберусь с калькулятором.
  6. Флэш для часов я починил. Вот эти две ошибки устранены. В лог больше не гадит. 2019-06-04 02:56:26.154: ERROR: ArgumentError: Error #1063: Argument count mismatch on hClock instance constructor. Expected from 1 to 1, got 0. at hClock instance constructor() at scaleform.clik.core::UIComponent instance constructor() at net.wg.infrastructure.base::UIComponentEx instance constructor() at net.wg.infrastructure.base.meta.impl::BaseDAAPIComponentMeta instance constructor() at net.wg.infrastructure.base::BaseDAAPIComponent instance constructor() at net.wg.infrastructure.base.meta.impl::AbstractViewMeta instance constructor() at net.wg.infrastructure.base::AbstractView instance constructor() at hangarClock instance constructor() 2019-06-04 02:56:26.263: ERROR: TypeError: Error #1009: Cannot access a property or method of a null object reference. Мне пришлось внести достаточно изменений, так что пока в сыром виде, но можете пользоваться, это уже рабочий вариант. Я просто позже приведу в порядок код флеша, там сейчас помойка небольшая. Теперь дело за калькулятором, там тоже до фига AntonVK_HangarClock_1.5.0.0.wotmod
  7. Сильно поломался флэш. Как теперь правильно инициализировать свой код в клиент - непонятно. Я пока не сдаюсь, попробую разобраться, но вероятность того, что часы с калькулятором этот патч не переживут, высокая. Увы. P.S. Я хоть и айтишник, но не разработчик и к сфере программирования отношения практически не имею. Да и от сферы мододельства весьма далёк, в изменениях в коде вг ориентируюсь крайне плохо. Поэтому мне сложно разобраться и переварить весь объем информации по коду. Так что, прошу не обижаться, пытаюсь в меру своих возможностей.
  8. Добрый день. Прошу прощения, но на данный момент исправить не удаётся. Что-то очень много поменялось в клиенте, я не знаю, как можно включить отладку в wot, а действия вслепую к успеху не приводят. Если будут какие-то мысли, я постараюсь исправить. Но пока увы...
  9. Добрый день! Скоро все приведу в порядок. Прошу прощения.
  10. Доброе утро! Скоро данной модификации будет 5 лет. Мод тех времен, когда Серб говорил - ужас какой, а Крута - страдай пидарас, твои мучения радуют нас) Тогда, 5 лет назад, я делал для себя калькулятор и была идея опубликовать для всех. logos.swf - тогда с этого все начиналось. К дню рождения мода, то есть, публикации на официальном форуме и на форуме koreanrandom - подготовлю немного ностальгии и выложу весь проект в исходных кодах.
  11. Понятно. Позволю себе спросить, каким образом узнаёшь, так сказать, правильные методы взаимодействия своих модов с интерфейсом ВГ? Разбор кода вг? Ориентируешься на XVM? Принципы работы своего кода AS3 в среде WoT можно в целом понять, изучая декомпилированный код ВГ. Но вот сама интеграция, как найти необходимый рабочий метод вызова - всегда было загадкой. Тем более, они нередко меняются. В своё время какие-то куски понаходил на просторах форума здесь, но как отслеживать эти изменения остаётся загадкой. Ещё один момент. Может знаешь какие-нибудь способы отладки модов, конкретнее, меня интересует debug log для python и as3. Буду очень признателен хотя бы за намёк, куда можно посмотреть, в сторону каких инструментов, а то я действую практически вслепую и не могу исправить некоторые существующие недочёты.
  12. Доброй ночи! Актуальные обновления в шапке. Я изменил нумерацию в названии модов, думаю, так будет понятнее, в каком патче вносились изменения. (ранее было удобно для некоторого внутреннего учёта, но я вряд-ли буду вносить какие-то ощутимые правки в часы) Огромное спасибо товарищу Ekspoint !!! Без него я бы вряд-ли быстро нашёл новый способ инициализации флэшек в лобби, увы, в форуме давненько не копаюсь. ( Или это просто альтернативный метод? И использовавшийся в прежних скриптах забывать не стоит? )
  13. немного не понял, в чём проблема? У меня мод даже обфускации не подвержен. Python просто в лёт декомпилируется, флэшки тоже декомпилируются, но уже без смысловых субстанций. Нужно флэш проект тоже в открытые запульнуть? ) С 0.9.18 началсиь следующие проблемы: - мод исчезает из ангара, не всегда, но бывает часто, при преждеверменном выходе из боя, если убили, например - при загрузке игры в окне выбора сервера нужн тыркать 2 раза - нет фокуса в боевом интерфейсе в чате по кнопке Enter, если ткунть мышкой, то всё норм так вот первый пункт решается пересборкой флэшэк, под актуальный патч. В качестве исходников я использую декомпилированные скрипты от WG от XVM/ 2 других пункта - я не знаю, в чём дело. В принципе, ничего не имею против публикации исходников, где-нибудь, на github. Здесь много опытных мододелов, в отличии от меня (я практически не слежу за изменениями из-за нехватки времени, мне сложно быстро вникнуть)
  14. Добрый день! Я обновлю мод в выходные. Пересоберу флэшки и исправлю скрипты. За подсказки в изменениях python спасибо.
  15. В патче 1.3 работает. Пока в обновлении смысла нет.
×
×
  • Create New...