Jump to content
Korean Random

st11ks

User
  • Posts

    20
  • Joined

  • Last visited

Posts posted by st11ks

  1. Ребят, требуется помощь в небольшой корректировке swf.

    Есть FAQ.swf, нужно поменять заголовок окна на другое статическое значение. Место в котором идет присвоение заголовка окна нашел, но изменение почему-то не отрабатывает в клиенте.

  2. @st11ks, JPEX Free Flash Decompiler. Позволяет редактировать AS2 и AS3, русифицирован.

    Если возникнут проблемы, обратитесь в профильные темы: Добавление логикиЗамена изображений.

    Спасибо, видел. Декомпилировать получается, а вот собрать обратно что-то никак. Поэтому разместил как заказ.

  3. пока остался на AS2, но за ним уже выехали!


     

    В ActionScript3.0 куча прикольных плюшек, удобно обращаться к питону.


     

    Крайне рекомендую к прочтению: ссылка

     

    В WG уже готовится обучающий материал для недо-флеш-девелоперов!

     

    А пока WG пишет свою статью может все-таки кто-нить поделится самым простым примером создания Simple Window?

    • Upvote 1
  4. 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. Дописывает функцию обхода каталога модов и импорта всего что встретится в каталоге модов.

  5. Всем доброго времени суток.

    Тут решил декомпилировать файлик 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()
    
  6.  

    Супер!!! То шо доктор прописал. Разобраться с синтаксисом и прочими особенностями питона не сложно, а вот копаться в хитросплетениях классов, используемых в движке Wot без этой доки - сущий ад :)

  7. неа. вот эту вот 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), отработал и мой перехват и твой

    python.log

  8. 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 по окончании своей обработки?

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

     

    вот как то так =)

     

    правильно ли я понимаю, что все дело в перехвате функции "NotificationPopUpViewer._NotificationPopUpViewer__onMessageReceived" ?

    Кстати, как же клиент определяет какой из скриптов первым должен обработать сообщение?

  10. Будте снисходительны к начинающему мододелу.

    Есть большой опыт разработки на других языках, но с питоном только начинаю свое знакомство. Декомпилированные исходники готовых модов - это конечно хорошо, но для человека начинающего в них очень тяжело разобраться. Поэтому был бы примного благодарен за примеры простейших скриптов именно для Wot.

    Например, скрипт на добавление в системные сообщения (нотификации) текста "Hello World!"

    или скрипт на перевод всех символов в игровом чате в кириллицу, если он набран на латинице.

     

    Вообщем чем проще тем лучше :)

×
×
  • Create New...