Jump to content
Korean Random
Sign in to follow this  
VasyaPRO_2014

Уши команд 0.9.15.1

Recommended Posts

Здравствуйте. Хочу получить экземпляр класса PlayersPanel из gui.Scaleform.daapi.view.battle.classic.players_panel (Естественно нужно получить ссылку на уже существующий объект, а не создавать свой).
Поиском по скриптам ничего не нашёл. Экземпляр 100% создается и его даже можно получить таким кодом:
 

from gui.Scaleform.daapi.view.battle.classic.players_panel import PlayersPanel

def new__init(self):
    global panel
    panel = self
    old__init(self)

old__init = PlayersPanel.__init__
PlayersPanel.__init__ = new__init

Но это уж совсем костыль, не думаю, что так стоит делать.

 

P.S. 0.9.15.1, не путать с 0.9.15.0.1.

Share this post


Link to post

Short link
Share on other sites

@VasyaPRO_2014,

from gui.Scaleform.framework import ViewTypes
from gui.app_loader.loader import g_appLoader
playersPanel = g_appLoader.getDefBattleApp().containerManager.getContainer(ViewTypes.VIEW).getView().components['playersPanel']
Edited by ShadowHunterRUS
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

, Спасибо большое.

 

Если я правильно понял, то этот класс каким-то магическим образом связан с AS классом PlayersPanel из net.wg.gui.battle.random.views.stats.components.playersPanel.

В нем есть атрибуты listLeft и listRight, которые являются экземплярами класса PlayersPanelList из net.wg.gui.battle.random.views.stats.components.playersPanel.list.

К ним я могу получить доступ из питона примерно так playersPanel.flashObject.listLeft. Тут всё хорошо. Но уже в нем (т.е. в классе PlayersPanelList) есть атрибут _items, к которому я с питона уже добраться не могу (думаю дело в том что он private, а не public).

 

Так вот вопрос в чём: как мне сделать что-бы с питона можно было обратится к этому атрибуту? Вероятнее всего нужно патчить PlayersPanel.swf, но как это правильно сделать я не знаю. Достаточно ли просто поменять private на public, или нужно ещё что-то сделать?

 

Целью является добраться из питона к TextField'ам никнейма игрока и названия танка, что-бы иметь возможность изменять их с использованием html. Возможно я выбрал неправильный путь, тогда подскажите как лучше это реализовать.

Share this post


Link to post

Short link
Share on other sites

Вероятнее всего нужно патчить PlayersPanel.swf, но как это правильно сделать я не знаю. Достаточно ли просто поменять private на public, или нужно ещё что-то сделать?

Если ничего не ломается, значит делаешь правильно)

Share this post


Link to post

Short link
Share on other sites

Если ничего не ломается, значит делаешь правильно)

Делаю вот так:

1. Беру playersPanel.swf из World_of_Tanks_CT\res\packages\gui.pkg\gui\flash\.

2. Открываю его с помощью ffdec.

3. Захожу в net.wg.gui.battle.random.views.stats.components.playersPanel.list.

4. В классе PlayersPanelList меняю private var _items:Vector.<IPlayersPanelListItemHolder> = null; на public var _items:Vector.<IPlayersPanelListItemHolder> = null;.

5. Сохраняю и закидываю в res_mods\0.9.15.1 Common Test\gui\flash.

6. Запускаю клиент WOT в орионе и пишу:

from gui.Scaleform.framework import ViewTypes
from gui.app_loader.loader import g_appLoader
playersPanel = g_appLoader.getDefBattleApp().containerManager.getContainer(ViewTypes.VIEW).getView().components['playersPanel']
print playersPanel.flashObject.listLeft._items

Получаю AttributeError: 'ScaleformBW::PyGFxDisplayObject' object has no attribute '_items', как собственно и до этого.

Что я делаю не так?

Share this post


Link to post

Short link
Share on other sites

battle.swf надо патчить

Сделал тоже самое но в battle.swf:

после загрузки боя выскочило окошко Please wait. И спустя некоторое время

---------------------------

World Of Tanks - Error

---------------------------

Application has encountered a critical error and will be closed.

Please contact tech support (https://ru.wargaming.net/support)

and send us crash dump file:

C:\Games\World_of_Tanks_CT\WorldOfTanks_error_report_160702-174621.zip

To copy this message to clipboard, press Ctrl+C.

---------------------------

OK  

---------------------------

 

В питон.логе ничего интересного нет.

Share this post


Link to post

Short link
Share on other sites

после загрузки боя выскочило окошко Please wait. И спустя некоторое время

ffdec ломает файл)

Никогда его не любил.

RABCDAsm самое то...

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

, Спасибо. Единственное что не совсем понятно как редактировать .asasm файлы, но это фигня. Как обратится к элементам вектора из питона?

Share this post


Link to post

Short link
Share on other sites

Как обратится к элементам вектора из питона?

)

опять патчить флешку)

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Жесть. Ну его нафиг этот флеш)

да там все просто)

создай функцию в PlayersPanelList.class.asasm, которая будет делать грязь, а из питона вызывай её)

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

И как мне перевести читабельный as код в asasm?

Скомпилировать и дизассемблировать же Edited by ShadowHunterRUS
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Скомпилировать и дизассемблировать же

Ясно, спасибо. И наконец: делаю я playersPanel.flashObject.listLeft.getItemsByIndex(1).listItem, по идее должен получить экземпляр класса PlayersPanelListItem, в котором уже находятся заветные textField'ы: playerNameFullTF, playerNameCutTF и vehicleTF. Но нет, в нем нет таких атрибутов не смотря но то, что все они public. Я опять что-то делаю не так?

Edited by VasyaPRO_2014

Share this post


Link to post

Short link
Share on other sites

Я опять что-то делаю не так?

Зачем работать с _items, когда есть _panelListItems? Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Мда. Ну вот почему вот так не работает:

from gui.Scaleform.framework import ViewTypes
from gui.app_loader.loader import g_appLoader
playersPanel = g_appLoader.getDefBattleApp().containerManager.getContainer(ViewTypes.VIEW).getView().components['playersPanel']
print playersPanel.flashObject.listLeft.getItemsByIndex(3)._listItem.playerNameFullTF.htmlText

А вот так работает:

from gui.Scaleform.framework import ViewTypes
from gui.app_loader.loader import g_appLoader
playersPanel = g_appLoader.getDefBattleApp().containerManager.getContainer(ViewTypes.VIEW).getView().components['playersPanel']
PlayersPanelListItemHolder = playersPanel.flashObject.listLeft.getItemsByIndex(3)
print PlayersPanelListItemHolder._listItem.playerNameFullTF.htmlText

Столько времени тупил, пока случайно не исправил. И то не понимаю как оно работает :D.
, Ещё раз спасибо большое за помощь. И ещё последний вопрос (надеюсь этот уж точно последний:D): Все эти манипуляции с asasm нужно будет делать каждый раз когда картоха захочет что-то поменять во флешке? И что с совместимостью с другими модами, если ещё кому понадобится изменить что-то battle.swf? Использовать два мода что меняют battle.swf без танцев с asasm не получится?

Share this post


Link to post

Short link
Share on other sites

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

Да.

Использовать два мода что меняют battle.swf без танцев с asasm не получится?

не получится.

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

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...