Jump to content
Korean Random

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


Tester

Recommended Posts

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

Link to comment
Short link
Share on other sites

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

Было где-то в питоне такое...
Link to comment
Short link
Share on other sites

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

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

Edited by Tester
Link to comment
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'ы, ну или подключиться к ним?

Link to comment
Short link
Share on other sites

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

не, нельзя.

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

Edited by SkepticalFox
  • Upvote 3
Link to comment
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;
Link to comment
Short link
Share on other sites

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

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

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

Link to comment
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
Link to comment
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
Link to comment
Short link
Share on other sites

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

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

 

 

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

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

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

 

Видео

Edited by POLIROID
  • Upvote 3
Link to comment
Short link
Share on other sites

...

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

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

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

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

Edited by Tester
Link to comment
Short link
Share on other sites

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

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

 

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

 

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

Edited by POLIROID
Link to comment
Short link
Share on other sites

...

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

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

Link to comment
Short link
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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...