Jump to content
Korean Random
Tester

Событие наведения мыши на игрока в ушах во время боя

Recommended Posts

Ребят, можно ли через питон отловить событие наведения мыши на какого либо игрока в ушах во время боя? Ведь при этом на миникарте иконки подсвечиваются. Или это реализовано через внутренние связи во флеше и в питоне никакой функции для обработки этого события нет?

Share this post


Link to post

Short link
Share on other sites

Ребят, можно ли через питон отловить событие наведения мыши на какого либо игрока в ушах во время боя? Ведь при этом на миникарте иконки подсвечиваются. Или это реализовано через внутренние связи во флеше и в питоне никакой функции для обработки этого события нет?

Было где-то в питоне такое...

Share this post


Link to post

Short link
Share on other sites

Было где-то в питоне такое...

Вселил надежду, а то отчаялся, все никак не могу найти. Сможешь посмотреть как будет возможность? Не сочти за наглость.

Edited by Tester

Share this post


Link to post

Short link
Share on other sites
      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'ы, ну или подключиться к ним?

Share this post


Link to post

Short link
Share on other sites

С питона случайно никак нельзя перехватывать флешовые Event'ы, ну или подключиться к ним?

не, нельзя.

если только грузить свою флешку...

Edited by SkepticalFox
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

не, нельзя.

если только грузить свою флешку...

Пробую через флешку, но застрял.

 

Есть класс:

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;

Share this post


Link to post

Short link
Share on other sites

Только сейчас смог посмотреть что там. Получить этот список можно только пересобрав battle.swf

По идее надо менять в VehicleMinimapEntry функции highlight/unhighlight, но для этого надо пересобирать minimap.swf

SkepticalFox, спасибо большое за помощь. Печально конечно, но что делать, попробую детальней изучить работу с флешем. Это ведь все еще актуальный гайд или есть варианты лучше/проще? Ну, не считая полную декомпиляцию и компиляцию с правкой ошибок и кода.

Share this post


Link to post

Short link
Share on other sites

Можно ли как то получить список элементов, так как тот же _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 by POLIROID
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

...

 

Ого, неожиданно...

Спасибо большое! Действительно работает.

 

В 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 by Tester

Share this post


Link to post

Short link
Share on other sites

В Adobe правда выдает ошибку вывода при компиляции, но в клиенте все работает. Не знаю, нормально это или нет.

Это определённо не нормально, там проект без зависимостей, полностью готовый (3-4 клика и собрано)

 

 

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

Но это из за моих ограниченных познаний, набираюсь опыта

Я бы с радостью дал вам проект под FD но лучше я вам дам видео как он делается за 2 минуты, надеюсь это будет более полезно для вас.

 

Видео

Edited by POLIROID
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

...

Спасибо за видео. На счет полезности согласен полностью.

В Adobe моей ошибкой было создание swf через тестирование (Ctrl + Enter), а не обычную публикацию. Хотя на выходе в том и другом случаях файлы идентичны.

А вот в FD и прежде все делал как на видео. Даже специально после еще все повторил шаг за шагом. Визуально содержимое верное, собирается без ошибок, а в итоге не работает. Но это не критично, позже еще попробую разобраться в причине.

Единственное, меня смущает то, что размеры собранных флешек в Adobe и FD отличаются (в том числе и у Вас на видео) - 2КБ против 3КБ. Решил для себя для работы с флешем отдать преимущество Adobe.

Edited by Tester

Share this post


Link to post

Short link
Share on other sites

меня смущает то, что размеры собранных флешек в Adobe и FD отличаются (в том числе и у Вас на видео) - 2КБ против 3КБ.

При билде во FlashDevelop я не трогал проект почти, там была выбрана конфигурация Debug, с конфигурацией Release там размер файлов будет одинаковый.

 

Но вот то что у вас файл собранный с помощью FlashDevelop не работает это странно, должно все работать ибо там нечему не работать =)

 

PS проверил у себя, оба работают отлично.

Edited by POLIROID

Share this post


Link to post

Short link
Share on other sites

...

Да я уже начал догадываться, что это моя локальная проблема. Сломал FD как то похоже, переустановлю, проверю.

А про debug не знал, спасибо. Ну и за решение вопроса еще раз спасибо.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...