![](https://koreanrandom.com/forum/uploads/set_resources_6/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
st11ks
-
Posts
20 -
Joined
-
Last visited
Posts posted by st11ks
-
-
Ребят, требуется помощь в небольшой корректировке swf.
Есть FAQ.swf, нужно поменять заголовок окна на другое статическое значение. Место в котором идет присвоение заголовка окна нашел, но изменение почему-то не отрабатывает в клиенте.
-
Я в курсе, спс.
Но мне нужно больше функционала. :)
В принципе похожий функционал я у себя реализовал в моде для кланов. Если интересно wotvs.com
-
1
-
-
@st11ks, JPEX Free Flash Decompiler. Позволяет редактировать AS2 и AS3, русифицирован.
Если возникнут проблемы, обратитесь в профильные темы: Добавление логики, Замена изображений.
Спасибо, видел. Декомпилировать получается, а вот собрать обратно что-то никак. Поэтому разместил как заказ.
-
Необходимо пересобрать один из swf файлов клиента с небольшими изменениями (заменить переменное значение на константу)
-
В этом патче многие моды не будут работать, в частности те, которые используют вызов окон в ангаре через fireEvent. WG переделал вызовы
-
пока остался на AS2, но за ним уже выехали!
В ActionScript3.0 куча прикольных плюшек, удобно обращаться к питону.
Крайне рекомендую к прочтению: ссылка
В WG уже готовится обучающий материал для недо-флеш-девелоперов!
А пока WG пишет свою статью может все-таки кто-нить поделится самым простым примером создания Simple Window?
-
1
-
-
окна запустить не проблема
несколько виртуальных машин и вперед
-
Edited by st11ks
There are many info about modification on this forum. Install Google Chrome and translate whole forum online
-
Edited by st11ks
Отвечу на первый твой вопрос.
Если ты начал изучать питон, то наверное уже знаешь что такое модули и пакеты модулей, как происходит импорт модулей и пакетов.
Так вот при запуске движок импортирует модули из папки \res\scripts\client, при импорте происходит создание классов, объектов и пр, каждый импортируемый модуль из этой папки в свою очередь импортирует вложенные модули и пакеты модулей и т.д.
Но как оказывается перед тем как импортировать модули из родной папки \res\scripts\client, движок просматривает на предмет импорта еще и папку модов для текущего патча, о чем радостно сообщает в логфайле:
Checking ./res_mods/0.8.11: mods found
После этого он сначала загружает модули из папки \res_mods\0.8.11\scripts\client, и только потом переходит к своей родной папке \res\scripts\client
А ты наверное уже знаешь, что в питоне при импорте двух модулей с одинаковым названием (даже если они лажат в разных местах) загружается первый, а загрузки второго не происходит (ну разве что явно не указать reload).
Таким образом, если у тебя есть:
\res_mods\0.8.11\scripts\client\CameraNode.pyc и
\res\scripts\client\CameraNode.pyc
то загружен будет первый, т.е. твой. Ради интереса создай файл login.py, с содержимым print('Hello WorldofTanks!'), скомпилируй и положи в \res_mods\0.8.11\scripts\client\
Запускай клиента и смотри что вывалится в python.log
А вообще большинство модов, которые народ пишет, используют для загрузки модифицированный \res\scripts\client\CameraNode.pyc. Дописывает функцию обхода каталога модов и импорта всего что встретится в каталоге модов.
-
Edited by st11ks
Слушай, а вроде же S0me0ne свои скрипты защищает от декомпиляции. Вернее сильно усложняет процесс обычной декомпиляции. Как uinfo декомпилировал?
-
Всем доброго времени суток.
Тут решил декомпилировать файлик horn.pyc и получил файлик horn.py с бредом внутри это типа зашифровано да?
code = 'x\xda.... упакованный исходник
exec code.decode('zlib') - выполнение кода упакованного исходника
нужен текст упакованного кода? Добавь:
print code.decode('zlib')
получишь:
def code(__=code): (_______)=(globals)();del((_______)['code']) if(((_______).get('__doc__'))is((None))): (__)=(map)((ord),(__)[(339):]);(______)=[0]*(((((len)((__))+(1))*(7))/(8)));((___),(____),(_____))=((0),(0),(0)) for((__))in((__)): if((__)<(128)):break if((____)==(0)):((___),(____))=((__),(1)) else: (______)[(_____)]=((((___)<<(____))|(((__)&(127))>>((7)-(____))))&(255));(_____)+=(1);((___),(____))=((__),(((____)+(1))%(8))) if((__)<(128)): if((____)!=(0)): (__)=((((___)<<(____))|((__)>>((7)-(____))))&(255)) (______)[(_____):]=[((__))] elif((____)!=(0)):del((______)[(_____):]) exec((''.join((map)((chr),(______))).decode('zlib')))in((_______)) if(((_______).get('__doc__'))is((None))):(_______)['__doc__']='' code()
-
Супер!!! То шо доктор прописал. Разобраться с синтаксисом и прочими особенностями питона не сложно, а вот копаться в хитросплетениях классов, используемых в движке Wot без этой доки - сущий ад :)
-
неа. вот эту вот NotificationListView._populate
какой последний был импортирован и последним перехватил NotificationListView._populate тот первым и получает.
SAVBO
угумс, черный стал не совсем черным... =( картошка что то меняла видимо....
Кстати, скрипты импортируются по алфавиту, т.е. если переименуешь свой скрипт в zzz.pyc то гарантированно будешь первым обрабатывать _populate.
Для примера написал свой скрипт, который перехватывает onMessageReceived(self, message, priority, notify, auxData, preventPopup)
Сделал так чтобы скрипт загружался до твоего, твой перехват отработал, мой нет.
Потом сделал так чтобы скрипт загружался после твоего, мой перехват onMessageReceived отработал, твой нет.
Потом в свою функцию добавил в конце вызов return tmp_onMessageReceived(self, message, priority, notify, auxData, preventPopup), отработал и мой перехват и твой
-
Edited by st11ks
неа. вот эту вот NotificationListView._populate
какой последний был импортирован и последним перехватил NotificationListView._populate тот первым и получает.
SAVBO
угумс, черный стал не совсем черным... =( картошка что то меняла видимо....
Жалко, что его скрипт нельзя декомпилировать....
А в твоем есть такое:
def new_populate(self, target = 'SummaryMessage'): if SessionStatistic.NeedProceed: SessionStatistic.proceedBattles() old_populate(self) self.as_setInitDataS({'scrollStepFactor': self.SCROLL_STEP_FACTOR}) messagesList = self._model.getMessagesList() formedList = []
т.е. ты возвращаешь управление еще до того как сам обработал это событие, может есть смысл вызвывать исходную функцию populate по окончании своей обработки?
-
я и самван оба хотим писать в системный канал и оба даем друг другу такую возможность.... по крайней мере я разрешаю другим модам перехватывать нужные функции.... только вот ВГ глубоко паралельно что мы оба пытаемся добавить последнее сообщение в системный канал игрулька лишь запоминает кто последний добавлял т.е. Допустим у вас стоя оба мода и вы пытаетесь развернуть системный канал сначала допустим получает управление мод самвана и добавляет свое сообщение в конец списка ВГ его показыает но не запоминает =) самвановскмй отдает управление моему моду мой мод читает список сообщений в канале но сомвановского там нету ибо игра его не запомнила и мой мод добавляет свое сообщений в итоге мое сообщение есть сомвановского нет. если сначала мой мод получает управление то его сообщение есть моего нет=)
вот как то так =)
правильно ли я понимаю, что все дело в перехвате функции "NotificationPopUpViewer._NotificationPopUpViewer__onMessageReceived" ?
Кстати, как же клиент определяет какой из скриптов первым должен обработать сообщение?
-
jeroohn, и все-таки, совместим ли ваш мод с модом "Клановые инструменты"?
-
Уважаемый jeroohn, у твоего мода Exel была какая-то несовместимость с модом клановой статистики тык
В последней версии Exel это уже исправлено или нет. И если не секрет, в чем была проблема?
-
неужели нет ниодного благородного мододела, способного поделиться своим опытом?
-
Будте снисходительны к начинающему мододелу.
Есть большой опыт разработки на других языках, но с питоном только начинаю свое знакомство. Декомпилированные исходники готовых модов - это конечно хорошо, но для человека начинающего в них очень тяжело разобраться. Поэтому был бы примного благодарен за примеры простейших скриптов именно для Wot.
Например, скрипт на добавление в системные сообщения (нотификации) текста "Hello World!"
или скрипт на перевод всех символов в игровом чате в кириллицу, если он набран на латинице.
Вообщем чем проще тем лучше :)
[Заказ] Сессионная статистика (отправка данных на сервер)
in Paid Work
Posted
По такому принципу построен мой мод (тыц), но он для кланов. Можешь взять его за основу и выпилить ненужный функционал, оставив только то что тебе надо.