Jump to content
Korean Random
Sign in to follow this  
ubacb

Устаревшие обсуждения из темы "Гайд по изменению и добавлению логики swf."

Recommended Posts

Сообщения перенесены из этой темы, т.к. утеряли актуальность.


Было бы очень кстати. Как раз пытался редактировать UserInfo.swf

Share this post


Link to post

Short link
Share on other sites

Приветствую.

 

Если найдётся хотя бы пара желающих кодеров, то я мог бы попробовать написать не очень большой гайд по зашиванию своего кода в swf как это делаем мы в XVM.

Под кодером я понимаю человека, который не по наслышке знает что такое IDE, ООП, командная строка. Для обычных пользователей не подойдёт.

 

Есть "Гайд по редактированию SWF файлов", но там только про изменение вшитых изображений.

 

Кстати, не гуглил. Кто искал, такое в инете попадается? На офф форуме ВГ такого нет, наверняка, вообще.

 

Если будет свободное время - пиши, конечно. Обязательно пригодится - инфы на этот счёт в сети почти нет.

Share this post


Link to post

Short link
Share on other sites

Изучив "Гайд по редактированию SWF файлов", понял, что мне его не достаточно. Буду весьма признателен гайду по инжекту своего кода в игровые swf.

Share this post


Link to post

Short link
Share on other sites

 

Ну вот пара людей и нашлась. Напишу, но не очень скоро. Ближайшие неделю-две нет времени заниматься.

Share this post


Link to post

Short link
Share on other sites

Ну вот пара людей и нашлась. Напишу, но не очень скоро. Ближайшие неделю-две нет времени заниматься.

 

Ну тогда можете хотя бы обозначить инструментарий? Планирую на выходных озадачить себя серъёзным изучением.

 

p.s. приятно встретить однофамильца ;)

Share this post


Link to post

Short link
Share on other sites

Ппц.. вот только сегодня задался одним вопросом преведшим меня к модингу AS в WoT и тут нахожу это... =)

 

Преамбула: Нужно получать статистику боя из игры. Игра в свою очередь пишет файлы Battle_results\***.dat файлы которые можно отпарсить и получить желаемое. Загвостка в том что игра пишет эти файлы только если досидеть до конца боя или нажать на кнопку "Подробнее" в логе в ангаре.

 

Так вот, задумка у меня заставить игру писать эти файлы всегда (вышел раньше, дисконект и т.п.). Насколько я понимаю, как вариант можно написать/дописать event_handler для генерации этих файлов как только в лог попадает запись об завершении боя.

Поправтье если я прусь не в том направлении...

 

Или же проще будет дописать функцию лога на запись инфы в файл?

Share this post


Link to post

Short link
Share on other sites

 

Это, наверняка, даже не во флеше интерфейса, поскольку интерфейсу такая инфа по ходу боя не нужна, а в игровой логике на Питоне.

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Это, наверняка, даже не во флеше интерфейса, поскольку интерфейсу такая инфа по ходу боя не нужна, а в игровой логике на Питоне.

Исходя из того что я нарыл тут ты прав и неправ...

В интерфейсном скрипте присутствует запись

gfx.io.GameDelegate.call("battleResults.show", [this.__get__data().arenaUniqueID]);

Т.е. получается надо вскрывать *.рус файлы и смотреть что там, но при этом надо будет подвесить обработчик который и будет запускать делегат.

 

Да.. чем под виндой декомпилить *.рус файлы лучше?

Share this post


Link to post

Short link
Share on other sites
декомпилить *.рус файлы лучше?

 

Ну вот это например попробуй: sourceforge.net/projects/unpyc/

 

PS. Сорри за оффтоп) Давайте не будем отклоняться от заданной темы (по изменению и добавлению логики swf.) :exc:

Share this post


Link to post

Short link
Share on other sites

Ну вот это например попробуй: sourceforge.net/projects/unpyc/

 

PS. Сорри за оффтоп) Давайте не будем отклоняться от заданной темы (по изменению и добавлению логики swf.) :exc:

Лично мне интересно сделать обработчик события в интерфейсе. Частично родной ссылается на функции зашитые в рус файлах. Так что одно из другого и всё что я нашёл или под линухи, что не вариант для меня и/или устаревшие.

Share this post


Link to post

Short link
Share on other sites

В общем есть ряд проблем:

1 - swfmill тот что я нашёл не работал без libiconv-2.dll, которую я тоже нашёл и т.п.

2 - после перегона swf в xml, правки и попытке перегона обратно ругается на некорректные символы

lobby_messenger.xml:62815: parser error : invalid character in attribute value
		 <String value="/>
						 ^
lobby_messenger.xml:62815: parser error : attributes construct error
		 <String value="/>
						 ^
lobby_messenger.xml:62815: parser error : Couldn't find end of Start Tag String line 62815
		 <String value="/>
						 ^
lobby_messenger.xml:62815: parser error : PCDATA invalid Char value 8
		 <String value="/>
						 ^
lobby_messenger.xml:62816: parser error : invalid character in attribute value
		 <String value="♀"/>
						 ^
lobby_messenger.xml:62816: parser error : attributes construct error
		 <String value="♀"/>
						 ^
lobby_messenger.xml:62816: parser error : Couldn't find end of Start Tag String line 62816
		 <String value="♀"/>
						 ^
lobby_messenger.xml:62816: parser error : PCDATA invalid Char value 12
		 <String value="♀"/>

3- в FlashDevelop не получается инжектнуть свой оверрайд. Оригинальные сорсы ругает на наличие строк в get функциях типа

null;

Если делать заглушку (Intrinsic) то при построении выдаёт список отсутствующих зависимостей и в итоге не инжектит.

Edited by axazol

Share this post


Link to post

Short link
Share on other sites

> 1 - swfmill тот что я нашёл не работал без libiconv-2.dll, которую я тоже нашёл и т.п.

Да, неприятно.

> 2 - после перегона swf в xml, правки и попытке перегона обратно ругается на некорректные символы

Да. У нас это решается стиранием таких символов.

http://code.google.com/p/wot-xvm/source/browse/trunk/src/xvm/swf/PlayersPanel.xml.patch

> 3- в FlashDevelop не получается инжектнуть свой оверрайд. Оригинальные сорсы ругает на наличие строк в get функциях типа null;

> Если делать заглушку (Intrinsic) то при построении выдаёт список отсутствующих зависимостей и в итоге не инжектит.

Не понял. Что такое оригинальный код? Похожей проблемы не встречал.

Share this post


Link to post

Short link
Share on other sites

> 1 - swfmill тот что я нашёл не работал без libiconv-2.dll, которую я тоже нашёл и т.п.

Да, неприятно.

> 2 - после перегона swf в xml, правки и попытке перегона обратно ругается на некорректные символы

Да. У нас это решается стиранием таких символов.

http://code.google.c...Panel.xml.patch

> 3- в FlashDevelop не получается инжектнуть свой оверрайд. Оригинальные сорсы ругает на наличие строк в get функциях типа null;

> Если делать заглушку (Intrinsic) то при построении выдаёт список отсутствующих зависимостей и в итоге не инжектит.

Не понял. Что такое оригинальный код? Похожей проблемы не встречал.

Я делал на примере FinalStatisticForm

class wot.FinalStatistic.FinalStatisticForm extends net.wargaming.hangar.FinalStatistic.FinalStatisticForm

так вот net.wargaming.hangar.FinalStatistic.FinalStatisticForm в проекте присутствует как заглушка

intrinsic class net.wargaming.hangar.FinalStatistic.FinalStatisticForm extends gfx.core.UIComponent
{
function FinalStatisticForm();
function setCommonData(data);
/* var _parent, __arenaUniqueId, tabs_mc, view_mc, vehicleSelector, __get__arenaUniqueId, __get__data;
function FinalStatisticForm()
{
 super();
 _global.ASSetPropFlags(net.wargaming.hangar.FinalStatistic.FinalStatisticForm.prototype, ["requestCommonData", "selectVehicle"], 6, 1);
} // End of the function
function configUI()
{
 super.configUI();
 __arenaUniqueId = _parent._parent.arenaUniqueId;
 this.delayedRefresh();
} // End of the function
function showWaiting(message, params)
{
 if (_parent._parent.showWaiting)
 {
	 _parent._parent.showWaiting(message, params);
 } // end if
} // End of the function
function hideWaiting()
{
 if (_parent._parent.hideWaiting)
 {
	 _parent._parent.hideWaiting();
 } // end if
} // End of the function
function get arenaUniqueId()
{
 return (__arenaUniqueId);
} // End of the function
function get data()
{
 return (__data);
} // End of the function
function delayedRefresh()
{
 if (requestCommonData == null)
 {
	 __delayId = setTimeout(this, "delayedRefresh", 50);
 }
 else
 {
	 if (__delayId > -1)
	 {
		 clearTimeout(__delayId);
	 } // end if
	 this.requestCommonData(__arenaUniqueId);
 } // end else if
} // End of the function
function setCommonData(data)
{
 this.hideWaiting();
 if (data)
 {
	 __data = data;
	 tabs_mc.dataProvider = [{label: "#menu:finalStatistic/tabs/commonStats", data: "CommonStats"}, {label: "#menu:finalStatistic/tabs/teamStats", data: "TeamStats"}, {label: "#menu:finalStatistic/tabs/detailsStats", data: "DetailsStats"}];
	 tabs_mc.drawLayout();
	 view_mc.changeView();
	 Selection.setFocus(tabs_mc);
	 vehicleSelector.__set__data(data);
 }
 else
 {
	 _parent.gotoAndStop("noData");
 } // end else if
} // End of the function
static function addBlankLines(label, labelTF, targetTFs)
{
 var _loc6 = labelTF.getTextFormat().getTextExtent(label, labelTF._width);
 var _loc5 = Math.floor(_loc6.textFieldHeight / (_loc6.ascent + _loc6.descent));
 var _loc4 = 0;
 var _loc1 = 0;
 var _loc2;
 for (var _loc4 = 0; _loc4 < _loc5 - 1; ++_loc4)
 {
	 for (var _loc1 = 0; _loc1 < targetTFs.length; ++_loc1)
	 {
		 _loc2 = targetTFs[_loc1];
		 _loc2.htmlText = _loc2.htmlText + "\n";
	 } // end of for
 } // end of for
} // End of the function
var STATS_LABELS_KEY = "#battle_results:team/stats/labels";
var requestCommonData = null;
var selectVehicle = null;
var __data = null;
var __delayId = -1;*/
}

Наследует по сути пустышку и сам содержит просто декларации. Edited by axazol

Share this post


Link to post

Short link
Share on other sites

Хм

 

Могу предложить пойти протореной дорогой и сделать пошагово для любой уже реализованной фишки из набора XVM. Это позволит отработать действия. Может ошибка вскроется в неож-ом месте.

 

Какой код подменяешь в xml? Вполне может быть что тот же как и в наших примерах, но в итоге не срабатывает. Опять же я такой косипор в minimap.swf встречаю.

 

...А. Блин, ты FinalStatisticForm и пробуешь. Глаза уже замылены ночью, пардон.

Edited by █XlebniDizele4ku

Share this post


Link to post

Short link
Share on other sites

извеняюсь что не по теме просто уже сил нет искать розкавырял весь swf не могу понять где и что изменить http://www.koreanrandom.com/forum/topic/1918-%d0%b2%d0%be%d0%b7%d0%b2%d1%80%d0%b0%d1%82-%d0%b2-%d1%80%d0%be%d1%82%d1%8b-%d0%bf%d0%be%d0%b4%d1%81%d0%b2%d0%b5%d1%82%d0%ba%d1%83-%d0%b4%d1%80%d1%83%d0%b7%d0%b5%d0%b9-%d0%b7%d0%b5%d0%bb%d0%b5%d0%bd%d1%8b%d0%bc-%d1%86%d0%b2%d0%b5%d1%82%d0%be%d0%bc/ ткните носом где эта функция и я сам изменю

Edited by Alastanka
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Разобрался.

По сути получается "родителя" можно попросту описывать аля:

intrinsic class net.wargaming.messenger.controls.ServiceChannelButton
{
public function ServiceChannelButton ();
public function receiveMessage (message, isPriority, notify, auxData);

public function showPriorityMessage(message, auxData);
}

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

 

Остался лишь вопрос дебага. =) Ну вот прям ну очень хочется посмотреть дамп переменной проходящей через функцию, хотя бы структуры.

Edited by axazol

Share this post


Link to post

Short link
Share on other sites

 

Да-да. Просто обещалка. Но в чём ошибся так и непонятно.

 

Для дебага мы пользуем наш xvm-proxy он же xvm-stat. В коде флеша в интересующем месте Logger.add("Bbb.abc = " + abc); и содержимое вываливает в терминал и в файл XVM.log в директории танков. Поиском можно у нас найти такие логгер.адд закоменченные. Сама реализация класса тоже открыта. Насколько знаю, там просто файл записывает на виртуальную фс посредством Dokan, а xvm-stat его просто подбирает, читает.

 

Короче, если самому делать, то я предлагаю создавать файл где-то и в него писать. Если хочется готовое, то использовать наш xvm-stat и связанный с ним класс utils.Logger.

Share this post


Link to post

Short link
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...