VasyaPRO_2014 163 Posted July 2, 2016 Здравствуйте. Хочу получить экземпляр класса 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. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335276 Posted July 2, 2016 (edited) @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 July 2, 2016 by ShadowHunterRUS 1 Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335280 Posted July 2, 2016 , Спасибо большое. Если я правильно понял, то этот класс каким-то магическим образом связан с 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. Возможно я выбрал неправильный путь, тогда подскажите как лучше это реализовать. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335282 Posted July 2, 2016 Вероятнее всего нужно патчить PlayersPanel.swf, но как это правильно сделать я не знаю. Достаточно ли просто поменять private на public, или нужно ещё что-то сделать?Если ничего не ломается, значит делаешь правильно) Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335283 Posted July 2, 2016 Если ничего не ломается, значит делаешь правильно) Делаю вот так: 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', как собственно и до этого. Что я делаю не так? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335287 Posted July 2, 2016 (edited) battle.swf надо патчить Edited July 2, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335288 Posted July 2, 2016 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 --------------------------- В питон.логе ничего интересного нет. Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335289 Posted July 2, 2016 (edited) после загрузки боя выскочило окошко Please wait. И спустя некоторое времяffdec ломает файл) Никогда его не любил. RABCDAsm самое то... Edited July 2, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335290 Posted July 2, 2016 ffdec ломает файл)Никогда его не любил. А что тогда использовать? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335291 Posted July 2, 2016 (edited) А что тогда использовать? http://forum.worldoftanks.eu/index.php?/topic/287391-/ battle.swf Edited July 2, 2016 by ShadowHunterRUS 1 Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335296 Posted July 2, 2016 , Спасибо. Единственное что не совсем понятно как редактировать .asasm файлы, но это фигня. Как обратится к элементам вектора из питона? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335298 Posted July 2, 2016 (edited) Как обратится к элементам вектора из питона?) опять патчить флешку) Edited July 2, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335299 Posted July 2, 2016 опять патчить флешку) Жесть. Ну его нафиг этот флеш) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335301 Posted July 2, 2016 (edited) Жесть. Ну его нафиг этот флеш)да там все просто) создай функцию в PlayersPanelList.class.asasm, которая будет делать грязь, а из питона вызывай её) Edited July 3, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335302 Posted July 2, 2016 asasm И как мне перевести читабельный as код в asasm? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335304 Posted July 2, 2016 (edited) И как мне перевести читабельный as код в asasm?Скомпилировать и дизассемблировать же Edited July 2, 2016 by ShadowHunterRUS 1 Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335305 Posted July 2, 2016 (edited) Скомпилировать и дизассемблировать же Ясно, спасибо. И наконец: делаю я playersPanel.flashObject.listLeft.getItemsByIndex(1).listItem, по идее должен получить экземпляр класса PlayersPanelListItem, в котором уже находятся заветные textField'ы: playerNameFullTF, playerNameCutTF и vehicleTF. Но нет, в нем нет таких атрибутов не смотря но то, что все они public. Я опять что-то делаю не так? Edited July 2, 2016 by VasyaPRO_2014 Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335383 Posted July 3, 2016 (edited) Я опять что-то делаю не так?Зачем работать с _items, когда есть _panelListItems? Edited July 3, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #335384 Posted July 3, 2016 Мда. Ну вот почему вот так не работает: 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 не получится? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #335385 Posted July 3, 2016 Все эти манипуляции с asasm нужно будет делать каждый раз когда картоха захочет что-то поменять во флешке?Да. Использовать два мода что меняют battle.swf без танцев с asasm не получится?не получится. Quote Share this post Link to post Short link Share on other sites