Jump to content
Korean Random

AntonVK

User
  • Content Count

    145
  • Joined

  • Last visited

  • Days Won

    9

AntonVK last won the day on October 9 2019

AntonVK had the most liked content!

Community Reputation

328 ⭐⭐⭐

1 Follower

About AntonVK

  • Birthday 05/27/1980

Basic information

  • Gender
    Мужчина

Contacts

  • Nick
    AntonVK

Recent Profile Visitors

3514 profile views
  1. Про часы я не забыл, скоро все будет
  2. Я поправлю все же :) просто никак руки не доходили. вначале нужно импортировать библиотеку для работы с регулярными выражениями import re Ссори, с телефона, не очень удобно подробнее писать. а так там просто удаляется win32|64 из пути. если любопытно, ты можешь читать описание к функциям на оф. Документации к питону, ну и много русскоязычных ресурсов с описанием.
  3. Да, с аналоговыми особо не разрисуешься, ну у меня будут занимать 128х128 пикселей, это не особо много, размер калькулятора, например, 260х284
  4. Решил вот такие аналоговые часики сделать. Вроде работает, перенесу в клиент. P.S. Все ленюсь подправить переопределенеи путей к конфигам, там одна строчка в скрипте питона __WoT__ = re.sub(r"(win\d*)([\\]*)", "", __WoT__)
  5. странно. По идее не должно. это предполагает дополнительное вмешательство со стороны пользователя. Пусть мод делает правильно самостоятельно. Можно, наверное, и с точкой. Когда создали пакеты модов у меня не получалось путь указать таким образом, поэтому я определял местоположение текущей директории в питоновском скрипте. Да, в этой части кода и исправлю. Обрежу правую часть с win(32|64). Можно и во флеше сделать, но в питоне проще. на выходных обновлю, может раньше, если получится.
  6. В этом обновлении опять что-то сломалось, у меня не применяется конфиг, хотя часы с калькулятором работают. Также ничего не пишется в python.log Update: понял, поменялись пути Update2: как временное решение, скопировать директорию (если игра установлена в C:\Games\World_of_Tanks ): C:\Games\World_of_Tanks\mods\configs\AntonVK в C:\Games\World_of_Tanks\win32\mods\configs\AntonVK В win32 директории mods\configs нет, поэтому нужно создать В ближайшее время я исправлю мод.
  7. Благодаря этим изменениям решены проблемы: - пропадание часов и калькулятора при преждевременном выходе из боя (если убили, например) - при выборе сервера при входе в танки не надо два раза тыкать на сервер - в бою по нажатию клавиши Enter не теряется фокус на окне чата Это отлично! Скажем спасибо товарищу Ekspoint! Привет! Всем добра! В шапке опубликовал исходные коды модификации. Это одна из самых старых модификаций, времен Серба и добрых танков. (скриншот специально выбирал того времени, когда артоводы доминировали) Жизнь он такая штука, завтра ее может не быть, а часы и калькулятор в ангаре всегда должны быть) Пользуйтесь. Все исходники, шрифты в архивах P.S. На картинке мод от дикей93. Тогда в танках был другой интерфейс визулизации, на AS2, калькулятор у дикея был взят с просторов Интернета и он не учитывал последовательность действий, но это была идея. После того, как картошка перешла на AS3, большинство старых модов сломалось... банальность, как калькулятор, исчез из игры, но были часы! Часы поддерживал игрок макс777, если мне не изменяет память... Это было давно, и тогда моды пихали в logos.swf/ Но настал патч 1.0. и часы по прежнему в ангаре )
  8. Доброе утро! В шапке актуальные обновления для текущей версии игры. Кто использует данную модификацию - рекомендую обновиться. - внесены изменения в код AS3 и Python - вроде бы устранилась проблема с пропаданием элементов из ангара при досрочном выходе из боя, но это не точно :) - обновлены примеры конфигураций и скриншоты к ним, а то им 5 лет уже. Функция def _populate(self): уже определена в классе hangarCalculatorButton(View, AbstractViewMeta): Тебе нужно было добавить строчку в неё, а не писать дописывать целиком вниз. Поэтому и не работало.
  9. Бывает, что пропадают часы или калькулятор, если выходить в ангар из боя сразу, как убили. Появилось это где-то в патче 0.9.18 или чуть новее. Не знаю, как это исправить. Попробую собрать с предложенным выше вариантом кода от Ekspoint
  10. Добрый день. Давно не заходил. Я вроде ничего не наблюдал, чтоб что-то сломалось. ивент, стальная охота, всмысле? у меня работало. Да. На прошлой неделе собрал новую версию, внёс некоторые изменения в код флеша, на днях обновлю.
  11. Рабочая версия калькулятора Я ещё не закончил, но пользоваться можно AntonVK_HangarCalculator_1.5.0.0.wotmod Не собирается у меня флешка с подключёнными библиотеками, как и раньше. Пока приведу всё в порядок, потом попробую разобраться с этим механизмом.
  12. @Ekspoint Большое спасибо! Сегодня добрался проверить, теперь вызов работает нормально.
  13. Добрый день! Прошу помочь в следующем вопросе. До патча 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()); } } } } Что в итоге, кнопка на месте, окно не вызывается. Буду признателен за помощь в решении проблемы. Спасибо!
  14. В Adobe Flash. Да с созданием флэш проблем нет. Сейчас проблема с вызовом окна калькулятора по кнопке.
  15. Спасибо, но есть нюансы. Я для компиляции использую исходники кода WG из XFW. Флэш вмешательства требовал крайне редко на самом деле и в фактически неизменном виде существовал очень давно, обычно ломались питон скрипты через патч. Часы сейчас рабочие, дошли руки заняться калькулятором. Ну и я хочу внести некоторые изменения. А вот библиотеки у меня не подключались из gui.pkg/gui/flash/swc, про это я знаю, хотя сейчас я думаю делаю тоже самое, только вместо swc файлов использую декомпилированные из набора XFW. В любом случае, имеет смысл попробовать снова подключить библиотеки, но вначале разберусь с калькулятором.
×
×
  • Create New...