Tester 5 Posted June 1, 2017 Ребят, можно ли через питон отловить событие наведения мыши на какого либо игрока в ушах во время боя? Ведь при этом на миникарте иконки подсвечиваются. Или это реализовано через внутренние связи во флеше и в питоне никакой функции для обработки этого события нет? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #393152 Posted June 1, 2017 Ребят, можно ли через питон отловить событие наведения мыши на какого либо игрока в ушах во время боя? Ведь при этом на миникарте иконки подсвечиваются. Или это реализовано через внутренние связи во флеше и в питоне никакой функции для обработки этого события нет?Было где-то в питоне такое... Quote Share this post Link to post Short link Share on other sites
Tester 5 #393180 Posted June 1, 2017 (edited) Было где-то в питоне такое... Вселил надежду, а то отчаялся, все никак не могу найти. Сможешь посмотреть как будет возможность? Не сочти за наглость. Edited June 1, 2017 by Tester Quote Share this post Link to post Short link Share on other sites
Tester 5 #393594 Posted June 3, 2017 private function onMouseOverHandler(param1:MouseEvent) : void { var _loc2_:PlayersPanelItemEvent = new PlayersPanelItemEvent(PlayersPanelItemEvent.ON_ITEM_OVER,this,this.holderItemID,param1); dispatchEvent(_loc2_); this.dynamicSquad.onItemOver(); } private function onMouseOutHandler(param1:MouseEvent) : void { var _loc2_:PlayersPanelItemEvent = new PlayersPanelItemEvent(PlayersPanelItemEvent.ON_ITEM_OUT,this,this.holderItemID,param1); dispatchEvent(_loc2_); this.dynamicSquad.onItemOut(); } Похоже, к сожалению, что все таки обрабатывается внутри флеш. В том числе и события подсветки иконок на карте и события, связанные с динамическими взводами. С питона случайно никак нельзя перехватывать флешовые Event'ы, ну или подключиться к ним? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #393627 Posted June 3, 2017 (edited) С питона случайно никак нельзя перехватывать флешовые Event'ы, ну или подключиться к ним?не, нельзя. если только грузить свою флешку... Edited June 3, 2017 by SkepticalFox 3 Quote Share this post Link to post Short link Share on other sites
Tester 5 #394015 Posted June 6, 2017 не, нельзя. если только грузить свою флешку... Пробую через флешку, но застрял. Есть класс: package net.wg.gui.battle.random.views.stats.components.playersPanel.events { import flash.events.*; import net.wg.gui.battle.random.views.stats.components.playersPanel.list.*; public class PlayersPanelItemEvent extends Event { public var playersListItem:PlayersPanelListItem = null; public var holderItemID:Number = -1; public var mEvent:MouseEvent = null; public static const ON_ITEM_OVER:String = "onPlayersPanelItemOver"; public static const ON_ITEM_OUT:String = "onPlayersPanelItemOut"; public static const ON_ITEM_CLICK:String = "onPlayersPanelItemClick"; public function PlayersPanelItemEvent(param1:String, param2:PlayersPanelListItem, param3:Number, param4:MouseEvent, param5:Boolean = false, param6:Boolean = false) { this.playersListItem = param2; this.holderItemID = param3; this.mEvent = param4; super(param1, param5, param6); return; } } } Подписываемся на эти события так: var _loc_2:* = null; for each (_loc_2 in this._panelListItems) { _loc_2.addEventListener(PlayersPanelItemEvent.ON_ITEM_OVER, this.onPlayersPanelItemOverHandler); _loc_2.addEventListener(PlayersPanelItemEvent.ON_ITEM_OUT, this.onPlayersPanelItemOutHandler); _loc_2.addEventListener(PlayersPanelItemEvent.ON_ITEM_CLICK, this.onPlayersPanelItemClickHandler); } Можно ли как то получить список элементов, так как тот же _panelListItems из PlayersPanelList закрыт? private var _panelListItems:Vector.<PlayersPanelListItem> = null; Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #394058 Posted June 6, 2017 (edited) /0/ Edited June 7, 2017 by SkepticalFox 1 1 Quote Share this post Link to post Short link Share on other sites
Tester 5 #394143 Posted June 7, 2017 Только сейчас смог посмотреть что там. Получить этот список можно только пересобрав battle.swf По идее надо менять в VehicleMinimapEntry функции highlight/unhighlight, но для этого надо пересобирать minimap.swf SkepticalFox, спасибо большое за помощь. Печально конечно, но что делать, попробую детальней изучить работу с флешем. Это ведь все еще актуальный гайд или есть варианты лучше/проще? Ну, не считая полную декомпиляцию и компиляцию с правкой ошибок и кода. Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #394152 Posted June 7, 2017 (edited) Можно ли как то получить список элементов, так как тот же _panelListItems из PlayersPanelList закрыт?А почему это он закрыт? Получить этот список можно только пересобрав battle.swf По идее надо менять в VehicleMinimapEntry функции highlight/unhighlight, но для этого надо пересобирать minimap.swfДа зачем? Хотя что я как мудак =) Не согласен — критикуй, критикуешь — предлагай, предлагаешь — делай, делаешь — отвечай Королев Сергей Павлович Python # Handle Player Panels items MOUSE_OVER/MOUSE_OUT # Andruschushun Andrey (P0LIR0ID) 07.06.2017 # License WTFPL from debug_utils import LOG_NOTE from gui.app_loader.settings import GUI_GLOBAL_SPACE_ID from gui.app_loader.loader import g_appLoader from gui.Scaleform.framework import g_entitiesFactories, ViewSettings, ViewTypes, ScopeTemplates from gui.Scaleform.framework.entities.View import View from gui.Scaleform.framework.entities.BaseDAAPIComponent import BaseDAAPIComponent PP_HANDLER_UI_ALIAS = 'PPHandler' PP_HANDLER_UI_INJECTOR_ALIAS = 'PPHandlerInjector' # View of our component class PPHandler(BaseDAAPIComponent): def onItemEventsS(self, eventType, vehicleID): LOG_NOTE('onItemEventsS', {'eventType': eventType, 'vehicleID': int(vehicleID)}) # add injector and component views to entitiesFactories g_entitiesFactories.addSettings(ViewSettings(PP_HANDLER_UI_INJECTOR_ALIAS, View, 'ppHandler.swf', ViewTypes.WINDOW, None, ScopeTemplates.GLOBAL_SCOPE)) g_entitiesFactories.addSettings(ViewSettings(PP_HANDLER_UI_ALIAS, PPHandler, None, ViewTypes.COMPONENT, None, ScopeTemplates.DEFAULT_SCOPE)) # load injector on battlePageShow def onGUISpaceEntered(spaceID): if spaceID == GUI_GLOBAL_SPACE_ID.BATTLE: g_appLoader.getDefBattleApp().loadView(PP_HANDLER_UI_INJECTOR_ALIAS) g_appLoader.onGUISpaceEntered += onGUISpaceEntered # unsubscribe on client closing def fini(): g_appLoader.onGUISpaceEntered -= onGUISpaceEntered Flash (компонент) package { import net.wg.infrastructure.base.AbstractView; import net.wg.gui.battle.components.BattleUIDisplayable; import net.wg.gui.battle.random.views.BattlePage; import net.wg.gui.battle.random.views.stats.components.playersPanel.events.PlayersPanelItemEvent; public class PPHandler extends BattleUIDisplayable { private var battlePage:AbstractView = null; public var onItemEventsS:Function = null; public function PPHandler() { super(); } override protected function configUI() : void { super.configUI(); var playersPanel:* = (battlePage as BattlePage).playersPanel; var panelListItem:* = null; for each(panelListItem in playersPanel.listLeft._panelListItems) { panelListItem.addEventListener(PlayersPanelItemEvent.ON_ITEM_OUT, onLeftItemHandler); panelListItem.addEventListener(PlayersPanelItemEvent.ON_ITEM_OVER, onLeftItemHandler); } for each(panelListItem in playersPanel.listRight._panelListItems) { panelListItem.addEventListener(PlayersPanelItemEvent.ON_ITEM_OUT, onRightItemHandler); panelListItem.addEventListener(PlayersPanelItemEvent.ON_ITEM_OVER, onRightItemHandler); } } private function getVehicleID(event:PlayersPanelItemEvent, isRight:Boolean) : Number { var playersPanel:* = (battlePage as BattlePage).playersPanel; if (isRight) return playersPanel.listRight._items[event.holderItemID].vehicleID; else return playersPanel.listLeft._items[event.holderItemID].vehicleID; } private function onLeftItemHandler(event:PlayersPanelItemEvent) : void { onItemEventsS(event.type, getVehicleID(event, false)); } private function onRightItemHandler(event:PlayersPanelItemEvent) : void { onItemEventsS(event.type, getVehicleID(event, true)); } } } python.log onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872573},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872573},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872571},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872571},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872587},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872587},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872578},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872578},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872590},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872590},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872583},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872583},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872585},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872585},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872568},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872568},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872568},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872568},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872597},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872597},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872581},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872581},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872579},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872579},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872592},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872592},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872584},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872584},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872582},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872582},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872572},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872572},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872572},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872572},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872596},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872596},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872596},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872596},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872576},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872576},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872589},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872589},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872588},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872588},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872586},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872586},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872593},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872593},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872593},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872593},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872591},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872591},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872580},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872580},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872575},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872575},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872594},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872594},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872569},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872569},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872570},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872570},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872574},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872574},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872595},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872595},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872595},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872595},) onItemEventsS ({'eventType': 'onPlayersPanelItemOver', 'vehicleID': 30872577},) onItemEventsS ({'eventType': 'onPlayersPanelItemOut', 'vehicleID': 30872577},) Ну и дабы на месте собирать src.zip *нужен Animate версии 15.1 либо выше, можно переделать под FlashDevelop Edited June 7, 2017 by POLIROID 2 Quote Share this post Link to post Short link Share on other sites
Tester 5 #394173 Posted June 7, 2017 (edited) ... Ого, неожиданно... Спасибо большое! Действительно работает. В Adobe правда выдает ошибку вывода при компиляции, но в клиенте все работает. Не знаю, нормально это или нет. VerifyError: Error #1014: Class net.wg.gui.battle.components::BattleUIDisplayable could not be found.ReferenceError: Error #1065: Variable PPHandlerInjector is not defined. А вот переделать под FD пока не получилось. Кажется все правильно собрал, компиляция идет без ошибок, но не работает почему то. В логе тоже без ошибок. Но это из за моих ограниченных познаний, набираюсь опыта. Edited June 7, 2017 by Tester Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #394177 Posted June 7, 2017 (edited) В Adobe правда выдает ошибку вывода при компиляции, но в клиенте все работает. Не знаю, нормально это или нет. Это определённо не нормально, там проект без зависимостей, полностью готовый (3-4 клика и собрано) переделать под FD пока не получилось. Кажется все правильно собрал, компиляция идет без ошибок, но не работает почему то. В логе тоже без ошибок. Но это из за моих ограниченных познаний, набираюсь опыта Я бы с радостью дал вам проект под FD но лучше я вам дам видео как он делается за 2 минуты, надеюсь это будет более полезно для вас. Видео https://www.youtube.com/watch?v=4OquIguVtDA Edited June 7, 2017 by POLIROID 3 Quote Share this post Link to post Short link Share on other sites
Tester 5 #394190 Posted June 7, 2017 (edited) ... Спасибо за видео. На счет полезности согласен полностью. В Adobe моей ошибкой было создание swf через тестирование (Ctrl + Enter), а не обычную публикацию. Хотя на выходе в том и другом случаях файлы идентичны. А вот в FD и прежде все делал как на видео. Даже специально после еще все повторил шаг за шагом. Визуально содержимое верное, собирается без ошибок, а в итоге не работает. Но это не критично, позже еще попробую разобраться в причине. Единственное, меня смущает то, что размеры собранных флешек в Adobe и FD отличаются (в том числе и у Вас на видео) - 2КБ против 3КБ. Решил для себя для работы с флешем отдать преимущество Adobe. Edited June 7, 2017 by Tester Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #394193 Posted June 7, 2017 (edited) меня смущает то, что размеры собранных флешек в Adobe и FD отличаются (в том числе и у Вас на видео) - 2КБ против 3КБ. При билде во FlashDevelop я не трогал проект почти, там была выбрана конфигурация Debug, с конфигурацией Release там размер файлов будет одинаковый. Но вот то что у вас файл собранный с помощью FlashDevelop не работает это странно, должно все работать ибо там нечему не работать =) PS проверил у себя, оба работают отлично. Edited June 7, 2017 by POLIROID Quote Share this post Link to post Short link Share on other sites
Tester 5 #394197 Posted June 7, 2017 ...Да я уже начал догадываться, что это моя локальная проблема. Сломал FD как то похоже, переустановлю, проверю.А про debug не знал, спасибо. Ну и за решение вопроса еще раз спасибо. Quote Share this post Link to post Short link Share on other sites
Tester 5 #396918 Posted July 7, 2017 (edited) . Edited July 9, 2017 by Tester Quote Share this post Link to post Short link Share on other sites