-
Posts
2,827 -
Joined
-
Last visited
-
Days Won
61
Posts posted by GPCracker
-
-
У меня была подобная проблема. Причина сразу выяснилась - отваливалась или зависала мышь. Реконнект USB и можно дальше отправлять в ангар раков и оленей.)
-
Вот куда отсылаются эти флаги... это от BigWorld.Entity.base
self.base.vehicle_moveWith(flags)
Оно на С написано, декомпиляция тут не работает. Вряд ли получится сделать круиз-контроль более мягким... Ну можно конечно реализовать периодические нажатия на кнопки вперед/назад (Широтно-Импульсная Модуляция (ШИМ)), но как уже сказали это не самая лучшая идея. А вот скорости на разные кнопки можно повесить... Это нужно устанавливать по кнопкам self.__cruiseControlMode в нужное значение). Или из внешки это будет
BigWorld.player()._PlayerAvatar__cruiseControlMode
Попробуй, может прокатит.
-
-
Собственно, для чего тебе эта инфа?
Вообще у каждого танка есть свой ID. По ID танка можно получить объект PyModel. Из него можно получить и хп, и скорость, а также дескриптор класса, определяющий расположение различных деталей танка, про матрицы компонентов (корпус, башня, пушка) я вообще молчу. Короче любую инфу о танке как объекте. Только подклассы у PyModel могут быть разные, и иметь разные свойства-методы (всякий танк - модель, но не всякая модель - танк). Вообще я бы посоветовал тебе почитать файлик хэлпа по питону BigWorld, он не сильно изменился с допотопных версий, хотя накрутили, конечно, много. Копай в сторону BigWorld.entity(ID).
Что касается внедрения скриптов в клиент, то подменять исходные файлы наверное самая плохая идея из всех существующих. Грамотные мододелы используют так называемые хуки (в питоне это реализуется вытаскиванием исходного метода какого-либо класса в глобальную переменную мода, вместо него подставляется свой метод, вызывающий исходный + дополнительный код). Это касаемо способа реализации с привязкой к каким-либо событиям (читай объектно-ориентированное программирование). Можно реализовать также через BigWorld.callback(), но этот способ сильно просаживает fps, если выполняемый внутри цикла код довольно громоздкий.
Только вот я не понимаю, нафига вытаскивать динамические данные в другую программу. Если их обрабатывать и потом возвращать обратно в игру, то проще все реализовать сразу на питоне. А в остальном... если интересует "ангарная" (небоевая) информация о машине, то есть у PyModel такое свойство typeDescriptor кажется, там все описано. Пушка, снаряды, критические УВН/УГН, максимальные скорости вперед/назад, баллистические постоянные для каждого типа снарядов и т.п. Я сейчас не дома, так что точно сказать не могу, по памяти пишу. Вообще имена методов объекта в питоне можно получить через dir() кажется. А в остальном, если надо, то только терпеливое раскапывание скриптов и изучение питона, в особенности интроспекции, тут поможет. За тебя код писать вряд ли кто будет. К тому же непонятно что (и непонятно зачем).
- 2
-
И еще один момент, при желаемых настройках происходит следующее:
Навожу прицел на союзника - контур меняет свой цвет - работает; перевожу прицел на другого союзника, тот тоже меняет цвет - работает; но вот прежний не меняет цвет своего контура на первичный.
То есть, поиграя в пятнашки на старте, весь бой вижу союзников с контуром <targetFriendColorIndex> вместо первичного <friendColorIndex>
Можно ли сделать так, что бы при отведении прицела от танка (<targetFriendColorIndex>) цвет контура возвращался к изначальному (<friendColorIndex>)?
Вариации настроек этого не позволяют.
Я такой проблемы не наблюдаю (точнее этот "вариант" учитывался при разработке мода). Он ДОЛЖЕН меняться обратно. Возможно это частная ошибка в других хуках на метод targetBlur. Могу предположить, что то же самое происходит и с противниками. Дело в том , что все хуки на метод выполняются последовательно, то есть ошибки в одном моде могут вызывать ошибки в другом. Нужно смотреть лог питона. См. Багрепорт. Однозначно без этого файла ничего сказать не могу.
-
вообще модик то запрещен по идее... ну небольшая его часть
Это недавно появилось в списке... Да и по идее в конфигах это отключено по умолчанию.
- 1
-
Если бы ты сразу сказал, что это только на автомате, фикс вышел бы раньше :=)
Просто когда я писал эту часть мода, я часа 4 копал связи функций в питоне WoT'а, чтобы исправить проблему и при этом ничего не сломать :) Запилил для ручного режима, вроде норм, а про захват цели забыл. Там алгоритм немного другой... дистанция считается динамически между точкой последнего засвета противника и позицией снайперской камеры игрока... И сегодня около получаса пытался понять, что в этой функции не так. Раз 5 прочитал, раза 3 на ручнике потестил в начале боя, все норм, только потом понял, что она правильная но не полная...В общем, поправил для захвата цели, версия 0.0.4 Beta.
- 1
-
Эээ, прицел скачет только в режиме "захват цели"? Или в ручном тоже?0.0.3 Beta все так же прыгает и не дает вести прицельную стрельбу по мечущимся на склонах целям (те же Рудники, заезд на гору).
По возможности устраните.
- 1
-
Ограничение на размер изображений. В сообщение вставить не получится... А прикрепить файлом могу.Их можно прикрепить непосредственно к сообщению на форум
-
Публикация данного мода в иных источниках без согласия автора запрещается.
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!
Версия клиента: 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й пост) они загружаться не будут.
Скриншоты мода:
Скачать:
Библиотека 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.- 18
-
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 на тему отрисовки маркера сведения. Тут еще есть некоторый вопрос: как отрисовывается маркер серверного прицела...
- 1
-
modEnabled - Включен мод или нет
А какой клавишей в целом включается или выключается мод?
Это глобальный параметр - когда он == False мод не загружается вообще (загрузка прерывается сразу после чтения конфига) (интеграция в игровые методы не происходит, все функции мода недоступны) Для включения/отключения отдельных функций мода есть дополнительные разделы конфигурации.
Хотел бы увидеть в новом билде параметр автозахвата дистанции с настройкой времени удержания цели.
В разработке. Автосброс цели после автозахвата через некоторое время, если цель не находится в прицеле. Также нужно кое-что поправить насчет оторванных башен... - они тоже объекты... И при пропадании цели из засвета. И неплохо бы для арты в аркадном режиме сделать отдельно параметр enableAutoLock.
P.S. Цель также сбрасывается при нажатии кнопки ручного захвата при наведении в пустое место.
Изначально мод разрабатывался для арты (закидывание под крыши, стрельба по движущимся равномерно прямолинейно оленям - отсюда и датчик скорости, и учет высоты), потом был допилен и для танков, по скольку общего функционала довольно много. А мод "Баллистический вычислитель" - только для танков.
'Оффтоп'
А вообще текущая реализация арты, когда видно все что светится и, следовательно, относительно низкий альфастрайк (для баланса) мягко говоря не очень. Было бы намного интереснее, если бы она прямым попаданием наносила больше урона, но вне прямой видимости ее наводили другие игроки (чисто по нажатию на кнопку в точке прицеливания появляется маркер) - дополнительный фактор командной игры.- 3
-
- Popular Post
Это официальная тема модификации.
This is official topic of the modification.Убедительная просьба не публиковать тестовые сборки (все что не в шапке) за пределами темы.
Please do not repost any testing assembly (located not in the first post) elsewhere except this topic."Правила для репостов"
1. Версии модификации, опубликованные в шапке, могут свободно использоваться и распространяться. Запрещено использование модификации в коммерческих целях.
2. Любой репост должен содержать ссылку на официальную тему, также необходимо указать автора модификации (GPCracker).
3. Все ссылки на скачивание (за исключением отдельных конфигов, без скриптов) должны вести на шапку данной темы.
4. По возможности необходимо также размещать описание модификации.
5. Использование в модпаках оговаривается отдельно.Улучшенная система прицеливания / Advanced Aiming System
Версия клиента: 0.9.13
Версия мода: 0.1.1
Автор: GPCracker
Описание:
Основная функция мода - корректировка дальномера. Дистанция в системе прицеливания WoT выбирается автоматически, при этом наведение осуществляется на ближайшую текстуру, способную оказать влияние на снаряд (кусты/деревья при этом не учитываются), либо на скайбокс, если целиться в небо. Но рассчитанная таким образом дистанция (дальномер) не всегда соответствует той, на которую необходимо выстрелить. Чаще всего она больше чем необходимая. Такое происходит, когда игрок пытается выстрелить с упреждением по быстро движущемуся танку или по танку, пропавшему из засвета на фоне далекой текстуры или скайбокса, или обстрелять куст, где ориентировочно спрятался вражеский танк. Из-за неверного выбора дистанции часто случаются перелеты, для игрока наведение выглядит нормальным, он вроде как наведен туда, куда нужно, но снаряд проходит над целью. Особенно это заметно на пушках с плохой настильностью, как их еще называют "фугасницы" или "бревнометы".
В артиллерийском режиме корректировка заключается в изменении высоты точки прицеливания. Это помогает сделать точный выстрел, когда цель заезжает под "крышу", т.е. сверху ее не видно, хотя фактически выстрелить по ней можно, ибо препятствий для снаряда нет, поскольку он "прилетает сбоку", а не "падает сверху". С помощью мода можно зафиксировать точку прицеливания на нужной высоте и выстрелить не "на крышу", а в противника под ней.
Данный мод не является автоприцелом или чем-то подобным, поскольку изменяется только расчетное удаление цели, но не сам вектор наведения, т.е. весь процесс прицеливания полностью остается под контролем игрока. Мод ничего не выцеливает и упреждение по цели не считает, его действие аналогично внесению поправок на удаление цели в снайперской оптике (IRL). Точка прицеливания (точнее ее проекция на плоскость монитора) всегда находится в центре прицельной сетки.
В моде также имеется дополнительный функционал. Описание можно найти под соответствующим спойлером или в патчноутах обновлений.
Важно:
Мод построен по модульному принципу - каждый функционал по сути является в некотором виде модулем, и он может зависеть от других модулей, внешних (видимых для пользователя) или внутренних (вычислительных алгоритмов). В зависимости от подключенных к функционалу модулей его поведение может отличаться, иногда значительно.
Часть функционала мода по разным на то причинам отключена полностью или частично в файле конфигурации. При необходимости, отредактировав этот файл, вы можете активировать или изменить режим работы некоторых модулей данного мода. Все изменения в файле конфигурации вы производите на свой страх и риск, как и непосредственно установку и использование модификации.
Несмотря на то что автор при разработке модификации стремится не создавать функционал, который будет вносить дисбаланс в игру и предоставлять игроку чрезмерные преимущества в виде автоматизации ключевых игровых процессов прицеливания, тем самым оказывая существенное влияние на статистику вне зависимости от навыков игрока (читы и аналогичные им вещи), использование некоторых модулей может расцениваться администрацией кластера как нарушение правил. Перед редактированием файла конфигурации необходимо ознакомиться с правилами Вашего кластера. Весь подобный функционал будет по мере возможности отключаться в релизных сборках (публикуемых в шапке темы или в разделе релизов на гитхабе с соответствующей пометкой).
Захват цели:Прямого отношения к игровому автоприцелу данный модуль не имеет, т.к. используется только внутри модификации.
Исходя из потребности в информации, необходимой для различного рода корректировок и т.д. мод захватывает, т.е. запоминает цель. Захват происходит только внутри мода, ни на какие другие процессы вне мода это прямо не влияет. С помощью различных алгоритмов мод может получать некоторые данные об этой цели, показывать их пользователю или использовать в качестве параметров для других алгоритмов. Модуль захвата цели может использовать другие модули, например различные алгоритмы захвата и может быть использован другими модулями, например модулем корректировки дальномера. Часть информации о захваченной цели отображается в соответствующем GUI.
Корректировка дальномера:Думаю, ни для кого не секрет, что под действием гравитации снаряд постепенно падает в полете. И чем дальше необходимо выстрелить, тем больше относительно прямой стрелок-цель нужно поднять ствол орудия, чтобы скомпенсировать это падение. И хотя в реальности на снаряд кроме гравитации действует еще весьма много факторов, в WoT они не учитываются. Дальше идет несколько парадоксальная для многих вещь - все снаряды в WoT имеют разную гравитацию. Это по большей части имеет отношение к артиллерии - повышенная гравитация делает траекторию более навесной, позволяя закидывать за холмы и т.д. И хотя влияния на алгоритм корректировки это и не оказывает, орудия с низкой скоростью снаряда и большой гравитацией более склонны к перелетам из-за некорректного определения расстояния системой прицеливания.
Во многих играх, основой которых является точная стрельба, и где присутствует учет баллистики пули/снаряда, предусмотрена либо система поправок на дальность, либо оружие просто "пристреляно" на определенную дистанцию, таким образом игрок может учитывать удаление цели и принимать соответствующие меры для компенсации "эффекта падения" снаряда. В WoT все обстоит немного по-другому. Для упрощения прицеливания расчет этой самой поправки осуществляется непосредственно скриптами игры, игроку же достаточно просто навести прицел в точку, куда он хочет выстрелить. Ввиду этого самого упрощения на сервер передаются не углы наводки орудия, а точка прицеливания, при этом орудие наводится так, чтобы снаряд прошел через эту самую точку, по настильной траектории (есть еще мортирная, или как ее еще называют, минометная, траектория). В данном моменте есть свои особенности, но не буду на них сейчас акцентировать внимание.
Точка прицеливания всегда жестко связана с "игровой камерой", через которую игрок "видит игровой мир", камера поворачивается мышкой. По центру камеры (или не совсем по центру) находится прицельная сетка, из ее центра в "игровой мир" уходит невидимый сканирующий луч (как инфракрасный лазер под стволом автомата), с помощью которого и осуществляется расчет точки прицеливания ("пятна" этого самого лазера на каком-нибудь баллистически значимом объекте). Для тех, кто попробовал представить данную аналогию, уже наверняка стало очевидным, что точку прицеливания ("пятно" лазера) игрок всегда видит в центре прицельной сетки вне зависимости от фактического удаления до объекта, определенного скриптами как цель. Соответственно и повлиять на определение расстояния до цели тоже проблематично.
Маркер орудия напрямую с камерой и прицельной сеткой не связан, он является результатом баллистического коллижн-теста для текущего положения орудия. Говоря простым языком, он показывает трехмерную точку, в которой снаряд, если в данный момент произвести выстрел, столкнется с баллистически значимым объектом. При расчете маркера орудия учитывается именно положение орудия, а не камеры игрока, и именно баллистическая, т.е. навесная траектория (она аппроксимируется до "ломаной кривой"). Связь между точкой прицеливания и орудием (маркер орудия это вещь вторичная) устанавливается следующим образом - орудие всегда стремится довернуться так, чтобы снаряд прошел максимально близко (разброс здесь не учитывается, он выражается рандомным радиусом и углом отклонения в полярной системе координат от оси орудия в момент выстрела) к точке прицеливания (конкретные алгоритмы могут незначительно отличаться), насколько это позволяют лимиты ориентации орудия. Поэтому если точка прицеливания находится не на ближайшем объекте, а просто "висит в воздухе", маркер орудия может проваливаться (если точка ближе) или наоборот подниматься (если точка за объектом). Первый случай более частый, и для его визуальной корректировки используются специальные алгоритмы, подробнее можно узнать, почитав немного тему.
Вернемся к теме корректировки дальномера после пояснения сущности некоторых происходящих в игре вещей. Как уже было упомянуто выше, стандартная система прицеливания WoT использует для определения расстояния коллижн-тест на пересечение луча камеры (тот самый "невидимый лазер") со статическими (карта) или динамическими (техника) объектами, способными оказать влияние на снаряд (кусты и деревья не учитываются). Но поскольку в некоторых случаях в том месте, куда игрок хочет выстрелить, ничего нет (танк туда еще не доехал или исчез из засвета), коллижн-тест вернет точку на далекой горе или скайбоксе. Соответственно, для стрельбы будет использоваться более высокая траектория, что и провоцирует перелет.
Данная проблема решается путем корректировки дистанции до точки прицеливания, и вместо результата коллижн-теста используется простой векторный расчет, при котором точка прицеливания будет находиться все так же в центре прицельной сетки, но на требуемом удалении от игрока. Модуль корректировки может либо захватывать дистанцию в ручном режиме, т.е. запоминать дистанцию до текущей точки прицеливания, и корректировать положение точки прицеливания при последующих ее расчетах, либо определять дистанцию автоматически до последнего известного положения цели, захваченной модулем захвата цели. Ручная корректировка имеет приоритет над автоматической. Методика ручной корректировки довольно проста - наводимся камерой (переводить пушку необязательно) на точку, расстояние до которой примерно соответствует тому, на которое мы собираемся стрелять, захватываем расстояние и переводимся в точку, куда нужно стрелять. Сделав выстрел или серию выстрелов, сбрасываем блокировку расстояния. Поведение модуля корректировки дальномера может быть изменено в файле конфигурации.
Корректировка абсолютной высоты:В артиллерийском режиме камера смотрит сверху вниз, но алгоритм расчета точки прицеливания практически не отличается. Все так же берется точка - результат коллижн-теста луча камеры и объектов на карте. Разница с аркадным и снайперским режимом заключается в том, что результирующая точка находится на середине между двумя коллижн-тестами - с учетом техники и без такового. Т.е. если в прицеле ничего нет, точка прицеливания будет на земле (середина нулевого отрезка). Если в прицеле есть танк - на середине между точкой на земле под танком и точкой на самом танке. Это позволяет стрелять в танк, а не по касательной в его крышу или под него (вероятность попадания при стрельбе в верхний край танка, как и в нижний, меньше, чем при стрельбе в середину, что вполне очевидно)
Но такой алгоритм не позволяет стрелять по целям, прикрытым чем-либо сверху (различные мосты, вокзал на химках) - результаты коллижн-теста будут возвращать точку на крыше, а стрелять нужно в танк под ней. У таких "крыш" стены бывают не всегда, что чисто логически подразумевает возможность попадания в танк. Для выполнения подобного выстрела нужно сместить точку прицеливания под крышу. Метод довольно простой - наводимся на точку, абсолютная высота которой примерно равна высоте в той точке, куда мы хотим выстрелить, захватываем высоту, переводимся куда нужно, делаем выстрел или серию выстрелов, удерживая блокировку, по окончании стрельбы ее можно сбросить. Поведение модуля корректировки высоты может быть изменено в файле конфигурации.
Автоматическая корректировка относительной высоты:Вполне логично предположить, что модуль захвата цели как-то используется и в артиллерийском режиме. И вы не ошиблись. Только здесь он корректирует не абсолютную высоту, а относительную. По данным от модуля захвата цели модуль корректировки вычисляет вектор высоты танка. Умножает его на некоторое число и добавляет к точке прицеливания, смещая ее. То есть прицеливание осуществляется уже не в землю, а в точку на некоторой высоте над землей. Что это дает? Возможность ведения стрельбы с упреждением без т.н. "заведения за цель", т.е. можно наводиться прямо перед целью, при правильном расчете снаряд прилетит не в землю под целью ("под гуслю"), а в борт. На холмистой местности рассчитать расстояние, на которое нужно "завести за цель" быстро довольно сложно, плюс нужно еще учесть маршрут противника, а в таком режиме нужно учитывать только скорость цели и ее маршрут и не нужно при этом искать подходящую точку на текстурах. Множитель высоты, используемый в расчетах и другие параметры можно задать в файле конфигурации.
Установка модификации:
Стандартная. Распаковать папку res_mods в корневую папку игры. При отсутствии в комплекте необходимых загрузчиков (это два файла scripts/client/cameranode.pyc и scripts/client/mods/__init__.pyc), вам необходимо загрузить и установить их отдельно. Они общие для всех модов в папке scripts/client/mods. Также возможна установка в scripts/client/gui/mods/, но при этом необходимо переименовать скрипт и основной файл конфигурации, добавив в начало необходимый для работы из этой папки префикс (mod_), таким образом, чтобы основное имя (не считая т.н. "расширения") обоих файлов осталось одинаковым.
Пользовательские сборки:
В теме публикуются только достаточно стабильные версии модификации. На свой страх и риск вы можете вручную собрать версию, находящуюся на тестировании из репозитория. В результате сборки будут сгенерированы все необходимые файлы, остановка осуществляется стандартным образом. Данная процедура требует некоторого опыта в работе с Python скриптами, а также наличия дополнительного программного обеспечения и подходит только для опытных пользователей.
Bug report and feature request (отчеты об ошибках и запрос функционала):
Автор приветствует публикацию в теме отчетов об ошибках стабильных версий, поскольку этим вы помогаете улучшить мод и сделать его более стабильным. Но для идентификации причины ошибки и ее устранения требуется дополнительная техническая информация.Если мод ведет себя нестабильно, наблюдаются какие-то необычные явления, или в логе (файл python.log в корне игры, нужно периодически проверять его содержимое, если вы хотите стабильной работы игры) появляются записи с заголовком "Traceback (most recent call last):", и тем более в больших количествах, будет целесообразно отписать об этом в теме, прикрепив файл python.log к сообщению, или (только для опытных пользователей) блок сообщения об ошибке. Сообщения, не содержащие технической информации об ошибке, либо подробного ее описания, а так же действий, которые привели к данной ошибке (если ошибка возникает при выполнении определенной последовательности действий) рассматриваться не будут. В некоторых случаях могут потребоваться скриншоты. Надеюсь, вы отнесетесь с пониманием и не будете пренебрегать этими простыми правилами при публикации отчетов об ошибках.
Если вы хотите предложить добавление какого-то дополнительного функционала, в первую очередь стоит убедиться в том, что его не интегрировали раньше и не "забыли" включить в конфиге. Далее необходимо подробно описать сам функционал, или эффект, который он должен давать. Автор не занимается интеграцией в мод дополнений, которые можно однозначно охарактеризовать, как функционал для ведения нечестной игры, вносящий в нее серьезный дисбаланс или предоставляющий чрезмерные преимущества игроку.
Редактирование файла конфигурации:
Файл конфигурации имеет несколько специфичную кодировку (UTF-8 w/o BOM), поэтому его нельзя редактировать стандартным блокнотом Windows (если вы сохраните этот файл, он будет сохранен в другой кодировке, что сделает его чтение внутри игры невозможным). Для редактирования этого файла нужно использовать профессиональные текстовые редакторы, например Notepad++ или Sublime Text.
Работа мода на тестовом клиенте (WoT CT):
Автор не занимается сборкой релизных версий под общий тест. Однако в некоторых случаях возможна публикация необходимых правок в отдельных ветках репозитория. Если данные правки будут актуальны к моменту релиза, они будут интегрированы в основную ветку. Тем не менее, вы можете самостоятельно собрать мод из тестовой ветки под клиент общего теста.
Тестовые версии:
В некоторых случаях бывает необходимо привлечение аудитории для проведения масштабного тестирования отдельного функционала или версий модификации. В таких случаях публикуются Alpha и Beta версии. Публикация этих версий осуществляется исключительно в теме, поскольку предназначены только для пользователей, регулярно читающих тему, в шапку темы (1й пост) они загружаться не будут.
Скриншоты мода:
Скачать:
Библиотека X-Mod необходима для работы мода.
AdvancedAimingSystem.zip
XModLib.zip
История версий:0.0.1 Beta [19.06.2014]
- адаптация под версию клиента 0.9.1
0.0.2 Beta [25.06.2014]
- исправлены мелкие ошибки.
- добавлен автосброс цели, захваченной автоматически при наведении, если она не захватывалась повторно в течение некоторого времени targetAutoLockResetTimeout - для аркадного+снайперского и арт-режима настраивается отдельно.
- исправлены ошибки скрипта, возникавшие при наведении на оторванную башню (или футбольный мячик - он типа тоже башня).
- при пропадании из засвета захваченной цели теперь запоминается точка пропадания из засвета (ранее мод просто отключался до повторного засвета).
- для арты в аркадном режиме прицеливания добавлен параметр enableAutoLockForSPG - отдельное разрешение / запрет автозахвата цели.
0.0.3 Beta [29.06.2014]
- исправлен "провал сведения" при захвате малой дистанции и наведении на далекий объект (пробная версия).
- исправлена ошибка с автозахватом цели в аркадном/снайперском режиме при игре на ПТ-САУ.
0.0.4 Beta [03.07.2014]
- исправлен "провал сведения" в режиме захвата цели.
0.0.5 Beta [03.07.2014]
- адаптация под версию клиента 0.9.3 (мод полностью пересобран).
- добавлены дополнительные опции конфига (для опытных пользователей).
- изменен формат макросов текста, теперь как у XVM (необходимо обновить конфиг).
- изменена система перехвата горячих клавиш, теперь мод корректно реагирует на сложные нажатия.
- описание параметров конфигурации теперь в самом файле конфигурации.
- исправлен цвет текстовых элементов (в 0.9.3 разрабы отключили свойство colour).
- автозахват теперь не сбрасывает цель при ручном захвате.
- если игрок целится в захваченную цель в снайперском режиме, мод не работает (точка прицеливания все равно на танке). Возможно было причиной некоторого понижения точности.
- добавлен снайперский режим для артиллерии.
- аркадный режим мода отключен (возможно будет после доработки).
0.0.6 Beta [08.11.2014]
- адаптация под версию клиента 0.9.4
- добавлена возможность рентген-захвата цели
0.0.7 Alpha, 0.0.8 Alpha [**.**.2015]
- адаптация под новые версии игрового клиента.
- добавлено большое количество нового функционала в тестовом режиме.
- подробную историю можно посмотреть в постах этих версий.
0.1.0 Release [23.12.2015]
- мод полностью переписан, перенесен на новую версию X-Mod.
- оптимизировано большое количество функционала, изменена логика его работы.
- оптимизировано потребление ресурсов некоторыми модулями.
- исправлены некоторые мелкие баги.
- полностью переработан файл конфигурации.
- полностью переработано форматирование макросов.
- добавлено большое количество мелких добавлений и улучшений.
- улучшена точность некоторых расчетов.
- внесено несколько улучшений в работу "артоснайперского" режима.
- полностью переработана система сборки и архитектура мода.
- библиотека X-Mod теперь является необходимым внешним модулем, а не интегрируется в мод (по техническим причинам).
- выпилены несколько нерабочих модулей.
- миграция репозитория (обновление является созданием репозитория "с нуля", а не изменениями к предыдущему, это обусловлено слишком большой разницей между версиями).
0.1.1 Release [29.01.2015]
- обновление совместимости под новую версию библиотеки X-Mod.
- добавлена возможность инверсии нажатия клавиш (обработчик клавиатуры).
- унифицированы некоторые моменты при обработке клавиатуры, упрощена структура конечного кода.
- упрощены и унифицированы некоторые моменты на уровне установки хуков.
- задержка при установке хуков больше не использует BigWorld.callback().
- добавлен контроль версий библиотеки X-Mod. Мод будет загружаться только на поддерживаемых версиях библиотеки.
Благодарности:
@StranikS_Scan, @MakcT40, @refaol, @Scharfhobel, @vasbelous, @magiksky709, @i31, @snechinskij, @lii, а также всем, кто принимает участие в тестировании и публикует информативные багрепорты.Отдельная благодарность @vasbelous, @snechinskij, @Scharfhobel за помощь в тестировании и отладке релиза 0.1.0; +@refaol - 0.1.1.- 49
- 2
-
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 тоже присутствует. Дико надоедает, ибо найти что-то нужное в
куче мусоралогах становится проблематично. -
Доработал мод под версию 0.9.0. SWF остались те же, питон переписан по образцу и подобию оригинала. Оптимизировано расположение файла конфигурации (теперь в папке с модами, при отсутствии файла конфиг создается автоматически при сохранении настроек в GUI), оптимизированы операции ввода-вывода в файл конфига. Остальное осталось как раньше. В общем, забирайте
пока горячеепока совместимо с текущей версией клиента.- 1
-
Вот все что удалось вытащить из основного скрипта этого мода.
Проблема совместимости не решается путем простого перекомпилирования, поскольку часть библиотек на которые ссылается код, найти не удалось.
'Основная функция смены камуфляжа'
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М.б. кому-то удастся починить мод.
- 1
Помогите с python
in ActionScript & Python
Posted · Edited by GPCracker
Найди файлик SWF с кнопкой, копай события питона на этой кнопке (DAAPI) (поиск по имени SWF + немного магии) и будет тебе счастье.
P.S. На компе, с которого пишу, клиента нет, поэтому точнее пока сказать не могу.