ktulho 5,790 Posted January 24, 2017 (edited) В данной теме собраны скрипты, которые изменяют внешний вид прицела, и расширяют его функционал. Список аддонов: Сведение Точка прицеливания Сфера разлета осколков ОФ снаряда Отображение элементов прицела Информация о захваченной цели Информация о технике в прицеле Информация о текущем снаряде Количество снарядов Перезарядка орудия Вероятность пробития Спидометр Режим техники (скоростной, осадный) Перекрестие Советы по оформлению конфига Пример файла конфигурации для всех аддонов данной темы: sight.xc Для подключения данного файла необходимо добавить ссылку в файл @xvm.xc: "sight": $ {"sight.xc": "sight"}, Сведение: {{py:sight.timeAIM}} - время до полного сведения (в секундах); {{py:sight.dispersion}} - разброс на расстоянии 100 метров (в метрах); PY(ON_AIMING) - событие для данного макроса. Скрипт: aiming.py Точка прицеливания: Данный скрипт добавляет следующие макросы: {{py:sight.distance}} - дальность полета снаряда (в метрах); {{py:sight.timeFlight}} - время полета снарядов (в секундах); {{py:sight.cameraHeight}} - высота камеры относительно точки прицеливания; PY(ON_MARKER_POSITION) - событие для перечисленных выше макросов. Примечание: в аркадном и снайперском режиме прицела макросы {{py:sight.distance}} и {{py:sight.timeFlight}} возвращают значение для центрального маркера сведения. Скрипт: markerPosition.py Сфера разлета осколков ОФ снаряда: Данный скрипт позволяет отображать сферу разлета осколков осколочно-фугасных снарядов. Отображение можно настроить в файле конфигурации sight.xc: // Сфера разлета осколков осколочно-фугасных снарядов "sphereDispersion": { // true - включить "enabled": true, // Для каких типов техники будет отображаться сфера. Возможные значения ["LT", "MT", "HT", "TD", "SPG"] "vtype": ["SPG"], // отображение сферы по нажатию клавиши "hotkey": { // true - включить "enabled": true, // коды клавиш можно посмотреть в файле \res_mods\mods\shared_resources\xvm\doc\keycodes.txt. "keyCode": 56, // onHold: false - произвести действие по разовому нажатию клавиши. true - по удержанию. "onHold": true } }, Скрипт: sphere.py Отображение элементов прицела: Скрипт управляет скрытием\отображением стандартных элементов прицела с помощью параметров из файла конфигурации sight.xc: // true - не отображать прицел после смерти "hideSightAfterDeath": false, // true - не отображать сетку прицела "removeIndicator": false, // true - не отображать центральный маркер "removeCentralMarker": false, // true - не отображать полосу перезарядки "removeLoad": false, // true - не отображать полосу прочности "removeCondition": false, // true - не отображать кассеты "removeContainers": false, // true - не отображать таймер перезарядки "removeLoadingTimer": false, // true - не отображать дистанцию до цели "removeDistance": false, // true - не отображать количество снарядов "removeQuantityShells": true, Скрипт: displayingItems.py Информация о захваченной цели: {{py:sight.autoAimName}} - никнейм игрока находящегося в автоприцеле; {{py:sight.autoAimVehicle}} - название техники находящейся в автоприцеле; {{py:sight.autoAimHealth}} - количество очков прочности техники находящейся в автоприцеле. PY(ON_AUTO_AIM) - событие срабатывает при захвате техники в автоприцел. Выделение техники находящейся в автозахвате. Настройка данного мода осуществляется в файле sight.xc: // Выделение цели находящейся в автозахвате "autoAim": { "enabled": true, // Способ выделения техники. Возможные значения: "arrow", "cylinder" // "arrow" - стрелка над техникой // "cylinder" - свечение вокруг техники // "" - отключить выделение техники "markerType": "cylinder" } Для подключение данного функционала необходимо скопировать содержимое архива markers.zip скопировать в папку res_mods\mods\shared_resources\xvm\res\ Архив с маркером:markers.zip Скрипт: infoAutoAim.py Информация о технике в прицеле: {{py:sight.nameTarget}} - никнейм игрока находящегося в прицеле; {{py:sight.vehicleTarget}} - название техники находящейся в прицеле; {{py:sight.vehNameTarget}} - название техники находящейся в прицеле в системе (usa-M24_Chaffee); {{py:sight.vtypeTarget}} - тип техники находящейся в прицеле (текстовые подстановки из секции vtype файла texts.xc); {{py:sight.vtypeTargetColor}} - цвет по типу техники находящейся в прицеле (текстовые подстановки из секции vtype файла colors.xc); {{py:sight.reloadTarget}} - время перезарядки техники находящейся в прицеле; {{py:sight.visionRadiusTarget}} - обзор техники находящейся в прицеле; {{py:sight.distanceTarget}} - расстояние до цели; {{py:sight.allyTarget}} - возвращает 'al', если в прицеле союзник, возвращает 'en', если в прицеле противник. В остальных случаях возвращает пусто; PY(ON_TARGET) - событие срабатывает при наведении на цель. Время отображения данных макросов настраивается в файле sight.xc: // время отображения макросов {{py:....Target}} после потери цели "delayHideTarget": 3, Скрипт: targetInfo.py Информация о текущем снаряде: {{py:sight.shellType}} - тип заряженного снаряда; {{py:sight.shellTypeColor}} - цвет по типу заряженного снаряда; {{py:sight.goldShell}} - возвращает 'gold' если снаряд можно купить за золото, иначе - пусто; {{py:sight.shellSpeed}} - скорость полета снаряда; {{py:sight.piercingShell}} - бронепробиваемость снаряда; {{py:sight.explosionRadiusShell}} - радиус разлета осколков снаряда; {{py:sight.damageShell}} - урон снарядом; {{py:sight.caliberShell}} - калибр снаряда. PY(ON_AMMO_CHANGED) - событие срабатывает при смене слота снарядов. Значения, возвращаемые макросом {{py:sight.shellType}} и {{py:sight.shellTypeColor}}, настраиваются в файле sight.xc в секциях "shellType" и "c:shellType": // Тип снаряда (макрос {{py:sight.shellType}}). "shellType": { "armor_piercing": "{{l10n:armor_piercing}}", // armor piercing / бронебойный "high_explosive": "{{l10n:high_explosive}}", // high explosive / осколочно-фугасный "high_explosive_stun": "{{l10n:high_explosive_stun}}", // high explosive explosive / оглушающий осколочно-фугасный "armor_piercing_cr": "{{l10n:armor_piercing_cr}}", // armor piercing composite rigid / бронебойный подкалиберный "armor_piercing_he": "{{l10n:armor_piercing_he}}", // armor piercing high explosive / бронебойно-фугасный "hollow_charge": "{{l10n:hollow_charge}}", // high explosive anti-tank / кумулятивный "flame": "{{l10n:flame}}", // flame / пламя (Lesta) "not_shell": "" // empty / пусто }, // Цвет по типу снаряда (макрос {{py:sight.shellTypeColor}}). "c:shellType": { "armor_piercing": "#CCCCCC", // armor piercing / бронебойный "high_explosive": "#CCCCCC", // high explosive / осколочно-фугасный "high_explosive_stun": "#CCCCCC", // stunning high explosive / оглушающий осколочно-фугасный "armor_piercing_cr": "#CCCCCC", // armor piercing composite rigid / бронебойный подкалиберный "armor_piercing_he": "#CCCCCC", // armor piercing high explosive / бронебойно-фугасный "hollow_charge": "#CCCCCC", // high explosive anti-tank / кумулятивный "flame": "#CCCCCC", // flame / пламя (Lesta) "not_shell": "#CCCCCC" // empty / пусто }, Скрипт: infoChargedShell.py Количество снарядов: {{py:sight.quantityShells}} - количество оставшихся снарядов; {{py:sight.quantityInClipShells}} - количество оставшихся снарядов в барабане; {{py:sight.quantityInClipShellsMax}} - максимальное количество снарядов в барабане; {{py:sight.burst}} - количество снарядов, выстреливаемых за одну очередь; {{py:sight.isFullClipShells}} - возвращает 'full' если барабан полностью заряжен, иначе пусто; PY(ON_AMMO_COUNT) - при изменении количества снарядов в активном слоте. Скрипт: quantityShells.py Перезарядка орудия: {{py:sight.leftTime(norm)}} - если параметр 'norm' не задан, то возвращается время оставшееся до конца перезарядки (в секундах). Иначе возвращается нормализованное значение. Для техники с механизмом дозарядки снаряда или техники с двумя стволами, возвращается время (нормализованное значение) оставшееся до конца перезарядки текущего снаряда. {{py:sight.reloadTime}} - время перезарядки (в секундах) Для техники с механизмом дозарядки снаряда или техники с двумя стволами, возвращается время перезарядки текущего снаряда. {{py:sight.reloadTimeClip}} - время перезарядки между снарядами в барабане (в секундах). {{py:sight.intuition}} - время смены заряженного боеприпаса, если доступно умение «Интуиция» у заряжающего. {{py:sight.isIncreasedReload}} - возвращает #FF0000, если увеличено время перезарядки орудия (крит боеукладки, заряжающего и т.д.), иначе пусто. Макросы для техники с механизмом дозарядки или техники с двумя стволами (для другой техники макросы возвращают пусто): {{py:sight.aLeftTime(norm)}} - если параметр 'norm' не задан, то возвращается время оставшееся до конца перезарядки всего барабана или обоих стволов (в секундах). Иначе возвращается нормализованное значение. {{py:sight.aReloadTime}} - время перезарядки всего барабана или обоих стволов (в секундах). {{py:sight.leftTimeShot}} - время, через которое орудие будет готово к выстрелу (в секундах). Макросы для техники с двумя стволами (для другой техники макросы возвращают пусто): {{py:sight.isPreparingSalvo}} - возвращает 'prepare' если идет подготовка к залпу, иначе пусто. {{py:sight.isGunBlocked}} - возвращает 'blocked' если орудие заблокировано, иначе пусто. PY(ON_RELOAD) - пока орудие перезаряжается срабатывает с частотой 10 раз в секунду. Скрипт: reloading.py Вероятность пробития: {{py:sight.piercingActual}} - пробивающая способность снаряда при подлете к цели; {{py:sight.armorActual}} - приведенная броня в точке прицеливания; {{py:sight.piercingChance(norm)}} - если 'norm' не задан, то возвращается вероятность пробития в процентах. Иначе возвращается нормализованное значение; {{py:sight.piercingChanceColor}} - цвет связанный с шансом на пробитие; {{py:sight.piercingChanceKey}} - название ключа шанса на пробитие (not_target, not_pierced, little_pierced, great_pierced); {{py:sight.hitAngle}} - угол вхождение снаряда в броню в точке прицеливания (в градусах); {{py:sight.normHitAngle}} - нормализованный угол вхождение снаряда в броню в точке прицеливания (в градусах). Если будет рикошет, то возвращает -1.0 ; PY(ON_CALC_ARMOR) - срабатывает, если в прицел наведен на противника. Цвета для макроса {{py:sight.piercingChanceColor}} настраиваются в файле sight.xc: //цвет шанса на пробитие ({{py:sight.piercingChanceColor}}) "c:piercingChance": { "not_pierced": "#E82929", "little_pierced": "#E1C300", "great_pierced": "#2ED12F", "not_target": "" }, Скрипт: chancePenetration.py Спидометр: Скрипт управляет отображением спидометра с помощью параметра "showSpeedometer" из файла конфигурации sight.xc: // опция управляет отображением спидометра (значение по умолчанию - "wheels") //"none" - скрыть для любой техники, "all" - показывать для любой техники, "wheels" - показывать для колёсной техники "showSpeedometer": "wheels", Скрипт: speedometer.py Режим техники (скоростной, осадный): {{py:mode.siege}} - для техники имеющий осадный режим возвращает 'siege' в осадном режиме, иначе 'normal'. Для остальной техники - пусто; {{py:mode.autoSiege}} - для техники имеющий автоматический осадный режим возвращает 'siege' в осадном режиме, иначе 'normal'. Для остальной техники - пусто; {{py:mode.speed}} - для техники имеющий скоростной режим езды возвращает 'speed' в скоростном режиме, иначе 'normal'. Для остальной техники - пусто. PY(ON_VEHICLE_MODE) - событие предназначено для обновления данных макросов. Скрипт: modesVehicle.py Перекрестие: {{py:sight.distCrosshair}} - расстояние до точки наведения центрального маркера; PY(ON_CROSSHAIR) - событие предназначено для обновления данного макроса. Скрипт: crosshair.py Советы по оформлению конфига: Совет №1. Если у вас в каком-то параметре очень сложная конструкция (много вложенных макросов с форматированием), то можно использовать макрос {{.}}. Например вы хотите использовать разные макросы перезарядки для обычной техники, двухствольной техники и техники с механизмом дозарядки. Для этого создаем в папке с вашим конфигом файл templates.xc содержащим: { "templates":{ "reload":{ "dual": { "format": "здесь то, что должно отображаться для двухствольной" }, "autoLoad": { "format": "здесь то, что должно отображаться для техники с механизмом дозарядки" }, "other": { "format": "здесь то, что должно отображаться для остальной техник" } } } } В файле @xvm.xc добавляем ссылку: "templates": ${"templates.xc":"templates"}, После этого в файле battleLabelSight.xc использовать следующую конструкцию: "timeReload": { "enabled": true, "updateEvent": "PY(ON_RELOAD), PY(ON_AIM_MODE)", "x": что-то там, "y": что-то там, "width": что-то там, "height": что-то там, . . . "format": "{{.templates.reload.{{py:featureVehicle('other', 'other', 'other', 'dual', 'autoLoad')}}.format}}" }, Для макроса {{py:featureVehicle}} необходим скрипт infoMyVehicle.py Пример устарел. Пример использования (у меня хватило сил сделать только аркадный режим))): 1) В файл battleLabels.xc добавить: ${ "battleLabelSight.xc":"def.cameraMode"}, ${ "battleLabelSight.xc":"def.timeReload"}, ${ "battleLabelSight.xc":"def.baseTimeReload"}, ${ "battleLabelSight.xc":"def.reloadBar"}, ${ "battleLabelSight.xc":"def.healthBar"}, ${ "battleLabelSight.xc":"def.healthPercent"}, ${ "battleLabelSight.xc":"def.health"}, ${ "battleLabelSight.xc":"def.shells"} 2) Файлы battleLabelSight.xc и sight.xc скопировать в папку с вашим кофигом (например в \res_mods\configs\xvm\default\) 3)В файле @xvm.xc нужно добавить ссылку на файл sight.xc: "sight": ${"sight.xc":"sight"}, 4) Файлы aimingSystem.py, reloading.py, quantityShells.py, sight.py скопировать в \res_mods\configs\xvm\py_macro\ config.zip 5) Установить шрифт используемый в данном примере: 7fonts.ru_DS-DIGIT.rar 6) Файл arcSight.png скопировать в \res_mods\mods\shared_resources\xvm\res\: arcSight.rar В примере использован макрос {{py:my_hp.health}} из скрипта myHP.py. Скрипт искать в этой теме. В результате у вас должно получиться следующее: Конфигурация прицела от @fgcwsxjegcbk2014. Конфигурация прицела от @WarDogs_Alex. Конфигурация прицела от @andreyvazmtp. Edited April 9 by ktulho 33 Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #376876 Posted January 24, 2017 @ktulho, я вот начинал делать то же самое =) Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #376878 Posted January 24, 2017 @ktulho, я вот начинал делать то же самое =) Quote Share this post Link to post Short link Share on other sites
Slava7572 1,685 #376881 Posted January 24, 2017 Воистину ХВМ становится глобальным модом,практически все есть)))) 1 1 Quote Share this post Link to post Short link Share on other sites
KL1SK 13 #376943 Posted January 24, 2017 (edited) В идеале нужно скрестить с этим. И то и это фишки для прицела. Нужно добавить: дистанцию до цели, при отсутствии цели - дистанция до точки сведения. максимальное количество снарядов в барабане, динамический цвет для перезарядки и хп. Скрытие стандартных элементов: снаряды и дистанция до цели. И да, вещь очень полезная, не нужно искать себе прицел по душе. Поставил, настроил, забыл. Edited January 24, 2017 by KL1SK 2 Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #376970 Posted January 25, 2017 (edited) какие еще макросы нужны вот тут писал :)) еще хотелки: - для настройки хотелось бы работоспособность в реплеях (посмотрел только время перезарядки, показывает нули), если возможно... - по окончании перезарядки в "leftTime" хотелось бы увидеть надпись типа "готов" (поскольку полное время перезарядки можно выводить через "reloadTime") - как настроить? - в стандартном прицеле показывает время перезарядки между снарядами в барабане - такой макрос нужен отдельно, чтобы одновременно смотреть и полную перезарядку и в барабане... Edited January 25, 2017 by Kapany3uk 2 Quote Share this post Link to post Short link Share on other sites
napeHb_u3_npeucnogHeu 4 #376974 Posted January 25, 2017 пишите какие еще макросы нужны. Время подлета боеприпаса к цели (для арт. прицела) Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377108 Posted January 25, 2017 (edited) - для настройки хотелось бы работоспособность в реплеях (посмотрел только время перезарядки, показывает нули), если возможно... , работает в риплеях. - по окончании перезарядки в "leftTime" хотелось бы увидеть надпись типа "готов" (поскольку полное время перезарядки можно выводить через "reloadTime") - как настроить? , как обычно {{py:sight.leftTime>0?{{py:sight.leftTime%3.1f}}|Готов}} - в стандартном прицеле показывает время перезарядки между снарядами в барабане - такой макрос нужен отдельно, чтобы одновременно смотреть и полную перезарядку и в барабане... , типа reloadTimeClip? - круг разлета осколков (для классического арт-прицела, для БА - не уверен) текущего фугаса , не представляю как это сделать графически. Edited January 25, 2017 by ktulho Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #377158 Posted January 26, 2017 , работает в риплеях.показывает нули, а хотелось бы таймеры..., типа reloadTimeClip?Да. И чтобы reloadTime всегда показывал только полную перезарядку, а reloadTimeClip только между снарядами в барабане... Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377160 Posted January 26, 2017 показывает нули, а хотелось бы таймеры... , 0 показывает до начала боя (исправлю), а потом нормально. Quote Share this post Link to post Short link Share on other sites
Lom 48 #377176 Posted January 26, 2017 мда... скоро прицелы вовсе ненужны будут))) и самое главное красиво же получается))) и функционально конечно же))) Quote Share this post Link to post Short link Share on other sites
demon2597 5,468 #377189 Posted January 26, 2017 (edited) пишите какие еще макросы нужны для арт прицела нужно время полета снаряда до точки прицеливания и расстояние до этой точки, если возможно конечно. а до кучи тогда прикольно было бы припаять и дальнобойность текущего орудия. отпадная тема, большое спасибо! теперь осталось найти время это попробовать:) единственный недостаток по сравнению с флэш прицелами- это то, что нельзя делать какие-то анимированные штуки, но это не смертельно. Edited January 26, 2017 by demon2597 2 1 Quote Share this post Link to post Short link Share on other sites
vlad_cs_sr 1,575 #377197 Posted January 26, 2017 , не представляю как это сделать графически. в смысле, нарисовать круг определённого диаметра вокруг центрального маркера не получится? Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377203 Posted January 26, 2017 в смысле, нарисовать круг определённого диаметра вокруг центрального маркера не получится? А как менять размер? Менять масштаб? Или менять ширину и высоту? Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #377205 Posted January 26, 2017 (edited) А как менять размер? Менять масштаб? Или менять ширину и высоту? м.б. размером картинки? изначально использовать картинку максимального размера с вписанным кругом (300х300 к примеру), а в процессе "подгонки" под конкретный танк размер будет пропорционально уменьшаться (клиент вроде ресайзит без искажений) @ktulho, тут проблема, по-видимому зависит от разрешения экрана: зеленый - клиентский таймер, белый - из аддона при разных режимах прицела белый таймер сдвигается непропорционально клиентскому... Как поправить? зы. использую клиентский таймер, поскольку привык к отображению секунд с сотыми, а в аддоне меняется 10 раз/сек, предположу, что если менять 100 раз/сек упадет производительность... Edited January 26, 2017 by Kapany3uk Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377206 Posted January 26, 2017 (edited) @Kapany3uk В аддоне, с помощью макроса sight_y, выравнивается относительно центрального маркера. С помощью макроса cameraMode определяй режим прицела, и размещай где захочешь в соответствующем режиме. Edited January 26, 2017 by ktulho 2 Quote Share this post Link to post Short link Share on other sites
vlad_cs_sr 1,575 #377233 Posted January 26, 2017 А как менять размер? Менять масштаб? Или менять ширину и высоту? эм, ну не знаю.. смотреть на зум в прицеле (в принципе, это тока для арт-режима нужно ж), и как-то масштабировать от него?.. а как это делается во флеш-прицелах? Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377234 Posted January 26, 2017 Мне кажется, изображение будет "мылиться". И при увеличении изображения , линия круга будет утолщаться, а при уменьшении становиться тоньше. Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #377274 Posted January 26, 2017 Мне кажется, изображение будет "мылиться". И при увеличении изображения , линия круга будет утолщаться, а при уменьшении становиться тоньше. а если взять максимально используемый размер как основу? тогда все остальные случаи - это уменьшение базовой картинки, и если при этом толщину круга в основе сделать 1рх, то даже при самом сильном уменьшении останется эта же толщина (меньше, чем 1рх комп не умеет :)) конечно "мыло" останется, но, КМК, будет уже не так сильно различаться в крайних случаях... Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #377285 Posted January 26, 2017 а если взять максимально используемый размер как основу? тогда все остальные случаи - это уменьшение базовой картинки, и если при этом толщину круга в основе сделать 1рх, то даже при самом сильном уменьшении останется эта же толщина (меньше, чем 1рх комп не умеет :)) , не получиться, это же растровое изображение. И при увеличении изображения , линия круга будет утолщаться, а при уменьшении становиться тоньше. Нарисовал круг диаметром 1000 вывел как 200 на 200 (уменьшил в пять раз). Результат: Добавил: {{py:sight.distance}} - дальность полета снаряда (в метрах); {{py:sight.timeFlight}} - время полета снарядов (в секундах). PY(ON_MARKER_POSITION) - по данному событию обновляются макросы {{py:sight.distance}} и {{py:sight.timeFlight}}. 3 Quote Share this post Link to post Short link Share on other sites