Jump to content
Korean Random

GPCracker

User
  • Posts

    2,827
  • Joined

  • Last visited

  • Days Won

    61

Posts posted by GPCracker

  1. Найди файлик SWF с кнопкой, копай события питона на этой кнопке (DAAPI) (поиск по имени SWF + немного магии) и будет тебе счастье.

    P.S. На компе, с которого пишу, клиента нет, поэтому точнее пока сказать не могу.

    • Upvote 1
  2. У меня была подобная проблема. Причина сразу выяснилась - отваливалась или зависала мышь. Реконнект USB и можно дальше отправлять в ангар раков и оленей.)

  3. Вот куда отсылаются эти флаги... это от BigWorld.Entity.base

    self.base.vehicle_moveWith(flags)

    Оно на С написано, декомпиляция тут не работает. Вряд ли получится сделать круиз-контроль более мягким... Ну можно конечно реализовать периодические нажатия на кнопки вперед/назад (Широтно-Импульсная Модуляция (ШИМ)), но как уже сказали это не самая лучшая идея. А вот скорости на разные кнопки можно повесить... Это нужно устанавливать по кнопкам self.__cruiseControlMode в нужное значение). Или из внешки это будет

    BigWorld.player()._PlayerAvatar__cruiseControlMode
    

    Попробуй, может прокатит.

  4. Собственно, для чего тебе эта инфа?

     

    Вообще у каждого танка есть свой ID. По ID танка можно получить объект PyModel. Из него можно получить и хп, и скорость, а также дескриптор класса, определяющий расположение различных деталей танка, про матрицы компонентов (корпус, башня, пушка) я вообще молчу. Короче любую инфу о танке как объекте. Только подклассы у PyModel могут быть разные, и иметь разные свойства-методы (всякий танк - модель, но не всякая модель - танк). Вообще я бы посоветовал тебе почитать файлик хэлпа по питону BigWorld, он не сильно изменился с допотопных версий, хотя накрутили, конечно, много. Копай в сторону BigWorld.entity(ID).

    python_client.zip

    Что касается внедрения скриптов в клиент, то подменять исходные файлы наверное самая плохая идея из всех существующих. Грамотные мододелы используют так называемые хуки (в питоне это реализуется вытаскиванием исходного метода какого-либо класса в глобальную переменную мода, вместо него подставляется свой метод, вызывающий исходный + дополнительный код). Это касаемо способа реализации с привязкой к каким-либо событиям (читай объектно-ориентированное программирование). Можно реализовать также через BigWorld.callback(), но этот способ сильно просаживает fps, если выполняемый внутри цикла код довольно громоздкий.

    Только вот я не понимаю, нафига вытаскивать динамические данные в другую программу. Если их обрабатывать и потом возвращать обратно в игру, то проще все реализовать сразу на питоне. А в остальном... если интересует "ангарная" (небоевая) информация о машине, то есть у PyModel такое свойство typeDescriptor кажется, там все описано. Пушка, снаряды, критические УВН/УГН, максимальные скорости вперед/назад, баллистические постоянные для каждого типа снарядов и т.п. Я сейчас не дома, так что точно сказать не могу, по памяти пишу. Вообще имена методов объекта в питоне можно получить через dir() кажется. А в остальном, если надо, то только терпеливое раскапывание скриптов и изучение питона, в особенности интроспекции, тут поможет. За тебя код писать вряд ли кто будет. К тому же непонятно что (и непонятно зачем).

    • Upvote 2
  5. И еще один момент, при желаемых настройках происходит следующее:

    Навожу прицел на союзника - контур меняет свой цвет - работает; перевожу прицел на другого союзника, тот тоже меняет цвет - работает; но вот прежний не меняет цвет своего контура на первичный.

    То есть, поиграя в пятнашки на старте, весь бой вижу союзников с контуром <targetFriendColorIndex> вместо первичного <friendColorIndex>

     

    Можно ли сделать так, что бы при отведении прицела от танка (<targetFriendColorIndex>) цвет контура возвращался к изначальному (<friendColorIndex>)?

    Вариации настроек этого не позволяют.

    Я такой проблемы не наблюдаю (точнее этот "вариант" учитывался при разработке мода). Он ДОЛЖЕН меняться обратно. Возможно это частная ошибка в других хуках на метод targetBlur. Могу предположить, что то же самое происходит и с противниками. Дело в том , что все хуки на метод выполняются последовательно, то есть ошибки  в одном моде могут вызывать ошибки в другом. Нужно смотреть лог питона. См. Багрепорт. Однозначно без этого файла ничего сказать не могу.

  6. Если бы ты сразу сказал, что это только на автомате, фикс вышел бы раньше :=)

    Просто когда я писал эту часть мода, я часа 4 копал связи функций в питоне WoT'а, чтобы исправить проблему и при этом ничего не сломать :) Запилил для ручного режима, вроде норм, а про захват цели забыл. Там алгоритм немного другой... дистанция считается динамически между точкой последнего засвета противника и позицией снайперской камеры игрока... И сегодня около получаса пытался понять, что в этой функции не так. Раз 5 прочитал, раза 3 на ручнике потестил в начале боя, все норм, только потом понял, что она правильная но не полная...

     

    В общем, поправил для захвата цели, версия 0.0.4 Beta.

    • Upvote 1
  7. 0.0.3 Beta все так же прыгает и не дает вести прицельную стрельбу по мечущимся на склонах целям (те же Рудники, заезд на гору).

    По возможности устраните.

    Эээ, прицел скачет только в режиме "захват цели"? Или в ручном тоже?
    • Upvote 1
  8. Публикация данного мода в иных источниках без согласия автора запрещается.
    The publication of this modification elsewhere without the consent of the author is prohibited.

    Это официальная тема модификации. Подписывайтесь, чтобы получать обновления в числе первых!
    This is modification official topic. Subscribe to receive updates among the firsts!




    post-21078-0-33946700-1404413937_thumb.jpg

    Версия клиента: 0.9.13
    Версия мода: 0.1.0
    Автор: GPCracker

    Описание:
    Модификация может изменять произвольным образом цвета, режимы и условия подсветки контуров. С помощью данной модификации можно назначить произвольный цвет и режим отрисовки контура любой техники, в зависимости от выполнения для нее некоторых условий. К примеру, сменить цвет контуров союзников, противников, подсветки контура своего танка, когда его не видно (скажем, заехали в кусты), возможно задать другой цвет контура, скажем, совзводным, тимкиллерам или даже определенному классу техники. Также возможна подсветка контуром цели, захваченной в автоприцел, что временами тоже может быть полезно.

    Важно:
    Часть функционала мода по разным на то причинам отключена полностью или частично в файле конфигурации. При необходимости, отредактировав этот файл, вы можете активировать или изменить режим работы некоторых модулей данного мода. Все изменения в файле конфигурации вы производите на свой страх и риск.

    Принцип работы мода:
    В момент, когда меняется состояние каждого танка, например, он засвечивается, исчезает, попадает в прицел, умирает и т.д. для него составляется при помощи некоторого набора функций набор тегов. Эти теги описывают состояние танка в момент после происхождения события. В файле конфигурации пользователями создается некоторый набор фильтров. У каждого из этих фильтров может быть несколько групп тегов. В каждой группе тегов имеется "положительный" (эти теги должны присутствовать у анализируемого танка) и "отрицательный" (этих тегов у танка быть не должно). Все остальные теги во внимание не принимаются. Соответственно, если выполняется данное условие хотя бы для одной из групп фильтра, условие фильтра считается выполненным, и техника проходит через фильтр. У каждого фильтра может быть задана одна или несколько настроек контуров. Настройка контура состоит из индекса цвета (его индекс в группе цветов, считая первый цвет нулевым) и режима отрисовки контура. Соответственно, контура с такими настройками добавляются к каждому танку, прошедшему через фильтр. Т.е. задавая группы тегов и настройки контуров для фильтра можно определить, какая техника и какие контура получит. Кроме того, состоянием активности каждого фильтра можно управлять "горячими клавишами", т.е. можно отключить или наоборот включить подсветку контуров определенной группы техники прямо в бою.

    Ограничения:
    - Не поддерживается более 4 цветов. Это ограничение движка игры. 4й цвет нужно использовать осторожно, он не задуман изначально для контуров танков и используется где-то еще. Краша не будет, но какой-нибудь объект может "неправильно раскраситься". Поэтому четвертым цветом нужно либо оставлять белый, либо использовать близкий к нему цвет.
    - Доступно только 3 режима отрисовки: полный контур (режим 0), контур за препятствием (режим 1, на большом расстоянии может некорректно работать), контур видимого участка (режим 2). Контуром обводится либо весь танк целиком, либо видимые (т.е. все пиксели на мониторе, которые принадлежат танку)/невидимые (скрытые за различными объектами) его участки. Сделать контур по "границе простреливаемости" невозможно (это механизм движка игры).
    - Нельзя создавать фильтры без групп тегов. Они не будут корректно работать.
    - Нельзя создавать конфликтные группы тегов. Т.е. один и тот же тег не может быть в "положительном" и "отрицательном" наборе одновременно.
    - Группы тегов фильтра должны быть заданы таким образом, чтобы один и тот же танк ни при каких адекватных обстоятельствах не мог пройти сразу два фильтра.
    Нарушение хотя бы одного из данных ограничений приводит как минимум к внутренней ошибке мода и багам в течение боя (последние три пункта), нарушение первых двух может вызвать краш клиента. Изменяйте конфиг осторожно и тестируйте его на реплее перед выходом в бой.

    Список доступных тегов:
    'alive', 'ally', 'teamkiller', 'squad', 'player', 'target', 'autoaim'
    + теги класса техники ('lightTank', 'mediumTank', 'heavyTank', 'SPG', 'AT-SPG')
    Список может обновляться в зависимости от версии мода.

    Установка модификации:
    Стандартная. Распаковать папку res_mods в корневую папку игры.
    Загрузчики в комплекте не поставляются. Если у вас их нет (это два файла scripts/client/CameraNode.pyc и scripts/client/mods/__init__.pyc), вам необходимо загрузить и установить их отдельно. Они общие для всех модов в папке scripts/client/mods.

    Кастомные сборки:
    В теме публикуются только достаточно стабильные версии модификации. На свой страх и риск вы можете вручную собрать версию, находящуюся на тестировании из репозитория. В результате сборки будут сгенерированы все необходимые файлы, остановка осуществляется стандартным образом. Данная процедура требует некоторого опыта в работе с Python скриптами и подходит только для опытных пользователей.

    Bug report and feature request (отчеты об ошибках и запрос функционала):
    Автор приветствует публикацию в теме отчетов об ошибках стабильных версий, поскольку этим вы помогаете улучшить мод и сделать его более стабильным. Однако отчет (как его называют программисты, bug report) должен содержать необходимую техническую информацию об ошибке, если таковая является ошибкой в работе кода. Таковой информацией в первую очередь является лог Python. Он хранится в корневой папке игры под названием python.log. В некоторых случаях его бывает вполне достаточно. Иногда требуются скриншоты и подробное описание ошибки, а также способа ее получения. Все зависит от конкретной ситуации, но отсутствие логов Python в отчете очень часто и значительно затрудняет отладку бага. Поэтому к любому отчету об ошибке необходимо прикреплять этот файл, или его часть, в которой описывается данная ошибка. Надеюсь, вы отнесетесь с пониманием и не будете пренебрегать этим простым правилом.
    Обращаю ваше внимание на то, что необходимо указывать версию мода в отчете об ошибке.
    Если вы используете кастомную сборку, необходимо указывать по состоянию на какой коммит вы ее собрали. Перед этим необходимо убедиться в отсутствии в соответствующей ветке новых коммитов, исправляющих данную ошибку. Подобные отчеты целесообразнее отправлять через систему личных сообщений.
    Если вы хотите предложить добавление какого-то дополнительного функционала, в первую очередь стоит убедиться в том, что его не интегрировали раньше и не "забыли" включить в конфиге. Далее необходимо подробно описать сам функционал, или эффект, который он должен давать. Автор не занимается интеграцией в мод дополнений, которые можно однозначно охарактеризовать, как функционал для ведения нечестной игры и запрещенный на всех кластерах WoT (мод не ориентирован на конкретный кластер).

    Редактирование файла конфигурации:
    Файл конфигурации имеет несколько специфичную кодировку (UTF-8 w/o BOM), поэтому его нельзя редактировать стандартным блокнотом Windows (если вы сохраните этот файл, он будет сохранен в другой кодировке, что сделает его чтение внутри игры невозможным). Для редактирования этого файла нужно использовать профессиональные текстовые редакторы, например Notepad++ или Sublime Text.

    Проверка версии клиента при запуске:
    Поскольку мод тестируется и отлаживается на конкретной версии игрового клиента, автор не может быть уверен в том, что мод будет корректно работать после очередного обновления. Поэтому мод проверяет соответствие версии клиента той, под которую мод собран. Если версия не совпадает, запуск мода и установка хуков происходить не будут. При этом вместо нормального сообщения о загрузке будет сообщение о несовместимости.
    Однако не всегда обновления клиента "ломают" мод. Иногда старая сборка вполне стабильно работает и после обновления. Поэтому в мод интегрирована возможность отключения данной проверки. Для этого необходимо изменить соответствующий параметр в файле конфигурации. Запуск мода в таком режиме вы осуществляете на свой страх и риск. Неопытным пользователям перед применением такой правки рекомендуется дождаться отчета о стабильности от более опытных пользователей, поскольку результат запуска может быть абсолютно различным вплоть до вылета или зависания клиента в самый неподходящий момент.

    Работа мода на тестовом клиенте (WoT CT):
    Автор не занимается сборкой релизных версий под общий тест. Однако в некоторых случаях возможна публикация необходимых правок в отдельных ветках репозитория. Если данные правки будут актуальны к моменту релиза, они будут интегрированы в основную ветку. Тем не менее, вы можете самостоятельно собрать мод из тестовой ветки под клиент общего теста.

    Тестовые версии:
    В некоторых случаях бывает необходимо привлечение аудитории для проведения масштабного тестирования отдельного функционала или версий модификации. В таких случаях публикуются Alpha и Beta версии. Публикация этих версий осуществляется исключительно в теме, поскольку предназначены только для пользователей, регулярно читающих тему, в шапку темы (1й пост) они загружаться не будут.

    Скриншоты мода:
    post-21078-0-91944400-1411654170_thumb.jpgpost-21078-0-67815600-1411654171_thumb.jpgpost-21078-0-56922100-1411654172_thumb.jpgpost-21078-0-23202000-1411654173_thumb.jpgpost-21078-0-89699400-1411654173_thumb.jpg

    Скачать:
    Библиотека X-Mod необходима для работы мода.
    EdgeDetect.zip
    XModLib.zip

    История версий:
    0.0.1 Beta [02.07.2014]
    - адаптация под версию клиента 0.9.1

    0.0.2 Beta [25.09.2014]
    - мод полностью пересобран
    - добавлены специальные параметры для продвинутых пользователей (управление задержкой инжекта, игнор версии клиента и т.д.)
    - описание параметров конфигурации теперь в самом файле конфигурации
    - изменены имена некоторых параметров конфигурации.
    - со старым файлом конфигурации мод работать не будет (либо будет работать некорректно)
    - адаптация под версию клиента 0.9.3

    0.0.3 Beta [08.11.2014]
    - адаптация под версию клиента 0.9.4
    - исправлена ошибка, когда контур текущей цели не удалялся после её уничтожения
    - исправлена ошибка, когда сбрасывались настройки цветов контура

    0.0.4 Beta [24.12.2014]
    - адаптация под версию клиента 0.9.5

    0.0.5 Beta [24.04.2015]
    - адаптация под версию клиента 0.9.7
    - структура мода переработана
    - кодировка файла конфигурации изменена с windows-1251 на UTF-8 w/o BOM
    - добавлены подсветка контура для цели в автоприцеле

    0.1.0 Release [29.01.2016]
    - мод полностью переписан, перенесен на новую версию X-Mod.
    - библиотека X-Mod теперь является необходимым внешним модулем, а не интегрируется в мод (по техническим причинам).
    - полностью переработана система сборки и архитектура мода.
    - миграция репозитория (обновление является созданием репозитория "с нуля", а не изменениями к предыдущему, это обусловлено слишком большой разницей между версиями).
    - полностью заменены все ключевые алгоритмы работы мода.
    - полностью переработан файл конфигурации.

    Благодарности:
    @snechinskij, @a9b2, @reg45, @StranikS_Scan, @refaol
    Отдельная благодарность @vasbelous, @snechinskij, @Scharfhobel, @refaol за помощь в тестировании и отладке релиза 0.1.0.
    • Upvote 18
  9. GPCracker сделайте пожалуйста, что бы сведение не прыгало на склонах.

    В первом посте есть подробное объяснение, почему сведение прыгает на склонах при пропадании танка из засвета.

    "Объяснение явления " провала сведения""

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

    Эксперимент.

    Полгода назад я тоже интересовался этим вопросом, и проводил эксперимент в трене. На расстоянии 300 - 400 м в куст на фоне неба встает танк, которого в кустах не видно. При выстреле он должен светиться. Танк стреляет, светится, я навожу орудие ему на какую-нибудь слабую точку (чтоб декали было видно + нужно точное орудие стреляющее навесом). Затем захватываю дистанцию до танка и жду, пока он отсветися (исчезнет). Стреляю, не перемещая мышь. Снаряды попадали туда, куда я целился до пропадания танка из засвета.

    Я конечно попробую найти способ исправить отрисовку маркера сведения, но пока ничего не обещаю, поскольку отрисовкой маркера сведения управляет другой модуль игры. Это не так просто найти способ это исправить, не создавая системы "костыли-велосипеды" и не нарушая функциональность.

     

    На ПТ не работает <targetLock>

    первую версию ставлю - все нормально. Возвращаю новый скрипт опять в ПТ не работает.

    У кого так же?

    Есть такая ошибка... Когда писал условие автозахвата при добавлении отдельного параметра для арты в аркадном режиме, забыл про тип 'AT-SPG'. Сори.

    autoLockAvalable = (enableAutoLock and vehicleClass is 'TANK' or enableAutoLockForSPG and vehicleClass is 'SPG')

    нужно изменить на

    autoLockAvalable = (enableAutoLock and vehicleClass is not 'SPG' or enableAutoLockForSPG and vehicleClass is 'SPG')

    Выпускать из-за одной этой ошибки новую версию пока не буду, попробую покопаться в исходниках WG на тему отрисовки маркера сведения. Тут еще есть некоторый вопрос: как отрисовывается маркер серверного прицела...

    • Upvote 1
  10. modEnabled - Включен мод или нет

     

    А какой клавишей в целом включается или выключается мод?

    Это глобальный параметр - когда он == False мод не загружается вообще (загрузка прерывается сразу после чтения конфига) (интеграция в игровые методы не происходит, все функции мода недоступны) Для включения/отключения отдельных функций мода есть дополнительные разделы конфигурации.  

    Хотел бы увидеть в новом билде  параметр автозахвата дистанции с настройкой времени удержания цели.

    В разработке. Автосброс цели после автозахвата через некоторое время, если цель не находится в прицеле. Также нужно кое-что поправить насчет оторванных башен... - они тоже объекты... И при пропадании цели из засвета. И неплохо бы для арты в аркадном режиме сделать отдельно параметр enableAutoLock.

    P.S. Цель также сбрасывается при нажатии кнопки ручного захвата при наведении в пустое место.

    Изначально мод разрабатывался для арты (закидывание под крыши, стрельба по движущимся равномерно прямолинейно оленям - отсюда и датчик скорости, и учет высоты), потом был допилен и для танков, по скольку общего функционала довольно много. А мод "Баллистический вычислитель" - только для танков.

    'Оффтоп'

    А вообще текущая реализация арты, когда видно все что светится и, следовательно, относительно низкий альфастрайк (для баланса) мягко говоря не очень. Было бы намного интереснее, если бы она прямым попаданием наносила больше урона, но вне прямой видимости ее наводили другие игроки (чисто по нажатию на кнопку в точке прицеливания появляется маркер) - дополнительный фактор командной игры.
    • Upvote 3
  11. python.log

    .....

    Traceback (most recent call last):
      File "scripts/client/gui/Scaleform/Flash.py", line 277, in __call__
      File "scripts/client/gui/Scaleform/Flash.py", line 261, in handleExternalInterfaceCallback
      File "scripts/client/gui/Scaleform/Minimap.py", line 242, in onLightPlayer
      File "scripts/client/gui/Scaleform/Minimap.py", line 738, in __callEntryFlash
    Exception: invokePy2As - Failed to invoke method.

    .....

     

    Эта ошибка сыплется в больших количествах в лог, появляется после установки XVM. Скорее всего связана с отсутствием (невыполнимостью) необходимого метода в swf файлах. Замечал где-то с версии 0.8.10, в xvm-5.3.2-test1 тоже присутствует. Дико надоедает, ибо найти что-то нужное в куче мусора логах становится проблематично.

  12. Доработал мод под версию 0.9.0. SWF остались те же, питон переписан по образцу и подобию оригинала. Оптимизировано расположение файла конфигурации (теперь в папке с модами, при отсутствии файла конфиг создается автоматически при сохранении настроек в GUI), оптимизированы операции ввода-вывода в файл конфига. Остальное осталось как раньше. В общем, забирайте пока горячее пока совместимо с текущей версией клиента.

     

    HangarCamo.zip

    • Upvote 1
  13. Вот все что удалось вытащить из основного скрипта этого мода.

    Проблема совместимости не решается путем простого перекомпилирования, поскольку часть библиотек на которые ссылается код, найти не удалось.

     

     

    'Основная функция смены камуфляжа'

    defcamo = 'winter'
    userandom = 'yes'
    recreateVehicle = ClientHangarSpace.ClientHangarSpace.recreateVehicle
    def my_recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback = None):
    try:
    cDescr = vDesc.type.compactDescr
    if (vDesc.camouflages is not None):
    try:
    config = ResMgr.openSection('camo.cfg')
    defcamo = config.readString('camo')
    userandom = string.lower(config.readString('userandom'))
    if (userandom != 'yes'):
    if (defcamo == 'winter'):
    zid = 0
    elif (defcamo == 'summer'):
    zid = 1
    elif (defcamo == 'desert'):
    zid = 2
    g_tankActiveCamouflage[cDescr] = zid
    else:
    g_tankActiveCamouflage[cDescr] = choice([0, 1, 2])
    except:
    pass
    except:
    pass
    recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback)

    ClientHangarSpace.ClientHangarSpace.recreateVehicle = my_recreateVehicle

     

     

    'Весь код, который удалось вытащить'

    global userandom, defcamo
    import BigWorld
    import ResMgr
    import string
    import Keys
    import game
    from random import choice
    from items.vehicles import CAMOUFLAGE_KINDS
    from gui import ClientHangarSpace
    from gui import g_tankActiveCamouflage
    from gui.Scaleform.Flash import Flash
    from gui.Scaleform.framework import g_entitiesFactories
    from gui.Scaleform.framework import ViewSettings
    from gui.Scaleform.framework import VIEW_TYPE
    from gui.Scaleform.framework import VIEW_SCOPE
    from gui.Scaleform.framework.entities.View import View
    from gui.WindowsManager import g_windowsManager
    from gui.Scaleform import SCALEFORM_SWF_PATH
    from gui.shared import events
    from gui.Scaleform.daapi.view.meta.WindowViewMeta import WindowViewMeta
    defcamo = 'winter'
    userandom = 'yes'
    recreateVehicle = ClientHangarSpace.ClientHangarSpace.recreateVehicle
    def my_recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback = None):
    try:
    cDescr = vDesc.type.compactDescr
    if (vDesc.camouflages is not None):
    try:
    config = ResMgr.openSection('camo.cfg')
    defcamo = config.readString('camo')
    userandom = string.lower(config.readString('userandom'))
    if (userandom != 'yes'):
    if (defcamo == 'winter'):
    zid = 0
    elif (defcamo == 'summer'):
    zid = 1
    elif (defcamo == 'desert'):
    zid = 2
    g_tankActiveCamouflage[cDescr] = zid
    else:
    g_tankActiveCamouflage[cDescr] = choice([0, 1, 2])
    except:
    pass
    except:
    pass
    recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback)

    ClientHangarSpace.ClientHangarSpace.recreateVehicle = my_recreateVehicle
    class MyWindow(View):
    def __init__(self):
    View.__init__(self)

    def _populate(self):
    View._populate(self)
    self.callToFlash({'random': userandom.lower() == 'yes', 'camo': defcamo})

    def callFromFlash(self, data):
    config = ResMgr.openSection('camo.cfg')
    zcamo = config.child(0)
    zrand = config.child(1)
    if data.random:
    userandom = 'yes'
    else:
    userandom = 'no'
    zrand.asString = userandom
    defcamo = data.camo
    zcamo.asString = defcamo
    config.save()
    self.destroy()

    def callToFlash(self, data):
    if self._isDAAPIInited():
    self.flashObject.as_callToFlash(data)

    def onWindowClose(self):
    self.destroy()

    _windowAlias = 'CamoSelectorWindow'
    _settings = ViewSettings(_windowAlias, MyWindow, 'MyWindow.swf', VIEW_TYPE.WINDOW, None, VIEW_SCOPE.DEFAULT)
    g_entitiesFactories.addSettings(_settings)
    class CamobSelector(View, WindowViewMeta):
    def __init__(self):
    View.__init__(self)

    def as_isModalS(self):
    if self._isDAAPIInited():
    return False
    else:
    return

    _loaderAlias = 'CamoSelector'
    _settings = ViewSettings(_loaderAlias, CamobSelector, 'CamoSelectorButton.swf', VIEW_TYPE.WINDOW, None, VIEW_SCOPE.GLOBAL)
    g_entitiesFactories.addSettings(_settings)
    old_init = Flash.__init__
    def new_init(self, swf, className = 'Flash', args = None, path = SCALEFORM_SWF_PATH):
    old_init(self, swf, className, args, path)
    if (swf == 'Application.swf'):
    self.addListener(events.GUICommonEvent.APP_STARTED, (lambda e: AppStarted(self, e)))

    Flash.__init__ = new_init
    def AppStarted(self, event):
    self.loadView(_loaderAlias)
    self.addExternalCallback('CamoSelector.showWindow', (lambda : g_windowsManager.window.loadView(_windowAlias)))

    handleKeyBkup = game.handleKeyEvent
    def loadWindow():
    try:
    from gui.WindowsManager import g_windowsManager
    g_windowsManager.window.loadView(_alias)
    except:
    pass

    def hkKeyEvent(event):
    try:
    isDown, key, mods, isRepeat = game.convertKeyEvent(event)
    if ((key == Keys.KEY_SPACE) and isDown):
    loadWindow()
    except:
    pass
    finally:
    return handleKeyBkup(event)

    game.handleKeyEvent = hkKeyEvent

     

     

     

    М.б. кому-то удастся починить мод.

    camo_source.py.txt

    • Upvote 1
×
×
  • Create New...