Jump to content
Korean Random

st11ks

User
  • Posts

    20
  • Joined

  • Last visited

Reputation

2 Noob

Contacts

  • Nick
    st11ks

Recent Profile Visitors

2,044 profile views
  1. По такому принципу построен мой мод (тыц), но он для кланов. Можешь взять его за основу и выпилить ненужный функционал, оставив только то что тебе надо.
  2. Ребят, требуется помощь в небольшой корректировке swf. Есть FAQ.swf, нужно поменять заголовок окна на другое статическое значение. Место в котором идет присвоение заголовка окна нашел, но изменение почему-то не отрабатывает в клиенте.
  3. В принципе похожий функционал я у себя реализовал в моде для кланов. Если интересно wotvs.com
  4. Спасибо, видел. Декомпилировать получается, а вот собрать обратно что-то никак. Поэтому разместил как заказ.
  5. Необходимо пересобрать один из swf файлов клиента с небольшими изменениями (заменить переменное значение на константу)
  6. В этом патче многие моды не будут работать, в частности те, которые используют вызов окон в ангаре через fireEvent. WG переделал вызовы
  7. А пока WG пишет свою статью может все-таки кто-нить поделится самым простым примером создания Simple Window?
  8. There are many info about modification on this forum. Install Google Chrome and translate whole forum online
  9. Отвечу на первый твой вопрос. Если ты начал изучать питон, то наверное уже знаешь что такое модули и пакеты модулей, как происходит импорт модулей и пакетов. Так вот при запуске движок импортирует модули из папки \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. Дописывает функцию обхода каталога модов и импорта всего что встретится в каталоге модов.
  10. Слушай, а вроде же S0me0ne свои скрипты защищает от декомпиляции. Вернее сильно усложняет процесс обычной декомпиляции. Как uinfo декомпилировал?
  11. 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()
  12. Супер!!! То шо доктор прописал. Разобраться с синтаксисом и прочими особенностями питона не сложно, а вот копаться в хитросплетениях классов, используемых в движке Wot без этой доки - сущий ад :)
  13. Кстати, скрипты импортируются по алфавиту, т.е. если переименуешь свой скрипт в zzz.pyc то гарантированно будешь первым обрабатывать _populate. Для примера написал свой скрипт, который перехватывает onMessageReceived(self, message, priority, notify, auxData, preventPopup) Сделал так чтобы скрипт загружался до твоего, твой перехват отработал, мой нет. Потом сделал так чтобы скрипт загружался после твоего, мой перехват onMessageReceived отработал, твой нет. Потом в свою функцию добавил в конце вызов return tmp_onMessageReceived(self, message, priority, notify, auxData, preventPopup), отработал и мой перехват и твой python.log
  14. Жалко, что его скрипт нельзя декомпилировать.... А в твоем есть такое: 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 по окончании своей обработки?
×
×
  • Create New...