Jump to content

Скрипт для воздушного трафика


Recommended Posts

Этот небольшой скрипт случайным образом генерит воздушный трафик из набора различных маршрутов и типов ЛА. Возможно это будет полезным на карте Невады, например для придания жизни крупному аэропорту Мак-Карен. С заданной периодичностью скрипт произвольно выбирает группы ЛА, назначает им какие-либо маршруты и добавляет в игру, а также уничтожает группы завршившие свой маршрут. Можно задавать максимальное число юнитов трафика и временные интервалы следования по маршрутам, а также ряд других параметров.

 

Во вложенных архивах:

  • AirTraffic_Sochi_EditRoutes_Test02.miz -- пример миссии с воздушным трафиком для DCS 1.5
  • AirTraffic_test_03_EditRoutes.miz -- пример миссии с воздушным трафиком для DCS 2.0
  • zATR_URSS.miz -- пример миссии с маршрутами для DCS 1.5
  • zATR_KLAS.miz -- пример миссии с маршрутами для DCS 2.0

 

  • AirTraffic_031.lua -- основной скрипт для обработки трафика
  • zzz0001_ATR_GameGUI.lua -- коллбэк по окончании загрузки миссии (нужен для создания своих маршрутов)

 

Для задания своих маршрутов необходимо создать файлик с таблицами маршрутов и типами ЛА. Создать его можно с помощью редактора миссий

и скрипта zzz0001_ATR_GameGUI.lua . Идеальным вариантом было бы добавить соответсвующие инструменты в редактор миссий, но этого я пока не умею((.

Сейчас этот работает с использованием DCS Control API (чтобы узнать в какую папку нужно поместить API скрипт, можно посмотреть здесь C:\Program Files\Eagle Dynamics\DCS World\API\DCS_ControlAPI.html ; в последних версиях DCS необходимо создать папку "Hooks" в папке "Scripts").

Пошаговая инструкция:

 

  1. файл zzz0001_ATR_GameGUI.lua кладём в папку "Hooks" (например, у меня для версии DCS 2.2 это выглядит так: C:\Users\Zubetto85\Saved Games\DCS.openalpha\Scripts\Hooks\zzz0001_ATR_GameGUI.lua)
  2. запускаем DCS и заходим в редактор миссий; создаём группы, маршруты, практически всё как обычно;
  3. для трафика может быть использован только первый юнит группы;
  4. для первого юнита группы в поле БОРТОВОЙ (TAIL #) пишем ATUF или ATUB, если иное, то группа и её маршрут не будут использованы для трафика;
  5. ATUF означает, что по маршруту данной группы могут летать все группы, у которых также в поле бортовой указано ATUF; ATUB - что по маршруту данной группы может летать только эта же группа;
  6. иначе говоря, ставим ATUF, если хотим чтобы на данном маршруте были ЛА разных типов, и ATUB - только одного конкретного типа;;
  7. сохраняем миссию, имя файла должно обязательно начинаться с zATR , например zATR_My_Routes_01.miz;
  8. запускаем эту миссию;
  9. по окончании загрузки из миссии можно выйти;
  10. в папке "Hooks" (указанной в п.1) должен появиться файлик примерно с таким именем AT_ROUTES__My_Routes_01_001.lua , в котором будут лежать таблицы маршрутов и типы ЛА.
  11. если миссия не загрузилась, можно посмотреть логи (в логах искать по zzz0001)
  12. если ранее уже создавали файлы с таблицами маршрутов их нужно переделать с помощью нового zzz0001_ATR_GameGUI.lua (не раньше 24.12.2016), старые таблицы не будут работать с AirTraffic_03.lua

 

Чтобы добавить воздушный трафик к уже имеющейся миссии нужен один триггер. В примерах миссий AirTraffic_Sochi_EditRoutes_Test02.miz и AirTraffic_test_03_EditRoutes.miz это самый первый триггер. Остальные триггеры добавлены только для демонстрации дополнительных возможностей (в игре F10 в радио меню).

 

В AirTraffic_03.lua реализована замечательная идея от Stonehouse, теперь во время игры можно добавлять, заменять или удалять таблицы маршрутов и ЛА хранящиеся в разных файлах AT_ROUTES_*.lua, иначе говоря стало возможным распределить трафик по различным слоям и подключать/выключать нужный слой по мере необходимости. Данную возможность дает функция editRoutes('Name', chance) . Для того чтобы подключить новый слой AT_ROUTES_something.lua нужно два действия в триггере:

DO SCRIPT FILE(AT_ROUTES_something.lua)
DO SCRIPT ( zAirTraffic.editRoutes('Name', chance)  zAirTraffic.ini() )

 

В приложенных примерах продемонстрированы все возможные действия с editRoutes('Name', chance). Вот некоторые пояснения к примерам:

  • editRoutes('Name') -- добавляет слой под произвольным именем 'Name' и весом равным 1; или, если под этим именем уже имеется какой-либо слой, то только задаёт ему вес равный 1
  • editRoutes('Name', 100) -- заменяет все слои на данный
  • editRoutes('Name', 0) -- удаляет слой с именем 'Name'
  • editRoutes('Name', 72) -- добавляет слой под произвольным именем 'Name' и (или, если такой уже существует, только) задаёт ему вес в соответсвии со значением вероятности chance
  • editRoutes(' ', 'equalize') -- задает всем слоям вес равный 1

Имена всех добавленных слоёв хранятся в таблице zAirTraffic.lotteryBag . Допустим у нас есть три слоя 'Layer01', 'Layer02', 'Layer03' с весами 1, 3, 1 соответственно, тогда zAirTraffic.lotteryBag = {'Layer01', 'Layer02', 'Layer02', 'Layer02', 'Layer03'} и вероятности что будет выбран первый или второй или третий слой соответственно равны 20%, 60%, 20%

 

zAirTraffic.ini(report) -- запускает (или останавливает, если таблицы маршрутов пусты) воздушный трафик; если report==true то будет выведено сообщение о статусе трафика

 

Параметры:

zAirTraffic.country = 'ITALY' -- страна юнитов траффика, если nil то страна будет задаваться как и в Редакторе Миссий (в файле zATR*.miz)

zAirTraffic.maxTot = 20 -- максимальное число юнитов траффика, которые могут быть на карте во время игры

zAirTraffic.maxResp = 5 -- максимальное число юнитов траффика, которые могут появиться одновременно

zAirTraffic.checkInt = 120 -- сек, интервал проверки стастуса юнитов траффика

 

zAirTraffic.RespMinInt = 119 -- сек, минимальный интервал появления нового юнита

zAirTraffic.RespMaxInt = 600 -- сек, максимальный интервал появления нового юнита

 

zAirTraffic.DepChance = 50 -- %, вероятность того что будет выбран маршрут отправления

zAirTraffic.DepMinInt = 240 -- сек, минимальный интервал следования по маршрутам отправления

zAirTraffic.DepMaxInt = 1200 -- сек, задает время на завершение маршрута отправления

zAirTraffic.ArrMinInt = 360 -- сек, минимальный интервал следования по маршрутам прибытия

zAirTraffic.frequency = 251

 

Важные моменты при создании своих маршрутов:

  • Скрипт трактует все маршруты либо как маршруты прибытия, либо как отправления.
  • Если маршрут начинается в воздухе и заканчивается посадкой, то такой маршрут будет отнесен к маршрутам прибытия; во всех остальных случаях - к маршрутам отправления.
  • Если в маршруте указаны точки взлёта и посадки, то считается что до взлёта юнит следует по маршруту отправления, а после взлёта - по маршруту прибытия (в AirTraffic_03.lua)
  • Юнит следовавший по маршруту отправления считатеся завершившим свой маршрут, если с момента его вылета до настоящего прошло время большее чем zAirTraffic.DepMaxInt.
  • Для маршрутов прибытия критерием завершения является низкая (<0.1 м/c) скорость юнита.

 

Для гражданского трафика незаменимым будет этот потрясающий мод: https://forums.eagle.ru/showpost.php?p=3268436&postcount=89

 

Буду рад любой конструктивной активности! :book:

AT_script_031.rar

AT_test_missions.rar


Edited by Zubetto
В последних версиях DCS необходимо создать папку "Hooks" для Control API скриптов
  • Like 4
Link to comment
Share on other sites

А нет Миссии уже готовой ?:)

Gigabyte Z690 UD DDR4 /i9-12900KF /64 Gb- G.SKILL Trident  DDR4 4000 МГц / Palit GeForce RTX 3070 Ti GameRock 8GB /Corsair HX1200 1200W 

DCS A-10C Обучающий урок "Концепция HOTAS" (RU)

DCS P-51D Руководство пилота

Обучающие миссии для Ми-8 (Радиооборудование)

Link to comment
Share on other sites

А нет Миссии уже готовой ?:)

Во вложении два примера миссий, в которых добвлен воздушный трафик; в эих примерах собственно только трафик.

Если требуется добавить трафик в уже готовую миссию, то нужно поставить ещё один триггер через редактор миссий, как в примерах.

Link to comment
Share on other sites

Во вложении два примера миссий, в которых добвлен воздушный трафик; в эих примерах собственно только трафик.

Если требуется добавить трафик в уже готовую миссию, то нужно поставить ещё один триггер через редактор миссий, как в примерах.

 

так это миссии? просто у них чето формат раровский... :huh: (сбило с толку). Ща глянем. Спасибо.

Gigabyte Z690 UD DDR4 /i9-12900KF /64 Gb- G.SKILL Trident  DDR4 4000 МГц / Palit GeForce RTX 3070 Ti GameRock 8GB /Corsair HX1200 1200W 

DCS A-10C Обучающий урок "Концепция HOTAS" (RU)

DCS P-51D Руководство пилота

Обучающие миссии для Ми-8 (Радиооборудование)

Link to comment
Share on other sites

Прикольная штука :thumbup:

 

Прям реальная движуха на аэродроме.

Gigabyte Z690 UD DDR4 /i9-12900KF /64 Gb- G.SKILL Trident  DDR4 4000 МГц / Palit GeForce RTX 3070 Ti GameRock 8GB /Corsair HX1200 1200W 

DCS A-10C Обучающий урок "Концепция HOTAS" (RU)

DCS P-51D Руководство пилота

Обучающие миссии для Ми-8 (Радиооборудование)

Link to comment
Share on other sites

Если кто понял , как делать, разжуйте пожалуйста на пальцах для "особо одаренных". А то - беда... :(

Вопрос в том как создать таблицу маршрутов или как добавить трафик в уже готовую миссию?

Link to comment
Share on other sites

Скорее, второе. Редактор потихоньку осваиваю -раньше сам миссии не делал - чужими пользовался.

 

В уже готовую миссию необходимо добавить один триггер (подробнее о триггерах лучше посмотреть в мануале). Можно просто настроить этот триггер как в приложенных примерах, тут не много вариантов. Триггер срабатывает один раз после начала миссии (в примерах спустя 4 сек) и выполняет скрипты, в том порядке как они указаны, сверху вниз:

  • выполнить файл: AirTraffic.lua -- обязательное действие, здесь объявляются функции для работы с трафиком
  • выполнить файл: AT_ROUTES__KLAS_002.lua -- обязательное действие, добавляются маршруты для трафика
  • выполнить скрипт: ... -- это действие можно не ставить, я добавил его для удобства задания параметров
  • выполнить файл: AirTraffic_ini.lua -- обязательное действие, запускается трафик

 

Действие выполнить скрипт я добавил для удобства, здесь можно задать значения параметров. Дефолтные значения всех параметров задаются вначале AirTraffic.lua , поэтому если убрать третье действие выполнить скрипт, то будут использованы эти дефолтные значения. Если, скажем, я хочу изменить только максимальное число юнитов трафика, а значения других параметров оставить дефолтными, то перед всеми параметрами, кроме zAirTraffic.maxTot , надо поставить два дефиса (минуса) -- , т.е. закоментить эти строки, и выглядеть это будет так:

 

--zAirTraffic.country = 'ITALY'
zAirTraffic.maxTot = 100
--zAirTraffic.maxResp = 5 
--zAirTraffic.checkInt = 120 
--zAirTraffic.RespMinInt = 119 
--zAirTraffic.RespMaxInt = 600 
--zAirTraffic.DepChance = 50 
--zAirTraffic.DepMinInt = 240 
--zAirTraffic.DepMaxInt = 1200 
--zAirTraffic.ArrMinInt = 360 
--zAirTraffic.frequency = 251

Link to comment
Share on other sites

Два вопроса:

1. Чтоб сделать трафик на другом филде (не Сочи) нужно выполнить п.п. 1-10 из первого поста?

2. Почему в AirTraffic.lua страна USA, а в воздухе Як-40 и Ил-76?

=WRAG=345

R7 5800X @ 4,8 GHz; DDR4 32Gb RAM (+32Gb swap); Radeon RX 6800 16Gb; 3840x2160; Win10-64

Link to comment
Share on other sites

Два вопроса:

1. Чтоб сделать трафик на другом филде (не Сочи) нужно выполнить п.п. 1-10 из первого поста?

 

Да

 

2. Почему в AirTraffic.lua страна USA, а в воздухе Як-40 и Ил-76?

 

Страну можно указать любую. Для трафика скрипт будет использовать все ЛА, у которых в поле бортовой было задано ATUF или ATUB и будет добавлять эти ЛА за страну указанную в AirTraffic.lua

  • Like 1
Link to comment
Share on other sites

  • ED Team

А если создать на аэродроме солдатиков, чтобы ходили и техперсонал изображали? Можно использовать для трафика наземные юниты?

 

zAirTraffic.RespMinInt = 119 -- сек, минимальный интервал появления нового юнита

zAirTraffic.RespMaxInt = 600 -- сек, максимальный интервал появления нового юнита

Сделал трафик в Неваде, а боты все рождаются одновременно и всё это похоже на постоянное дежавю. Все события в миссии методично повторяются из раза в раз. Не работает случайность интервалов.

Настройки скриптовых параметров дефолтные из тестовой миссии.


Edited by SL PAK
йность
Link to comment
Share on other sites

А если создать на аэродроме солдатиков, чтобы ходили и техперсонал изображали? Можно использовать для трафика наземные юниты?

 

Вроде бы они ходить не умеют. Только бегать c автоматом наперевес :)

Куплю B-17, можно B-24. B-29 не предлагать!

Burning Skies

=Burning Skies= @ Facebook

Link to comment
Share on other sites

Сделал трафик в Неваде, а боты все рождаются одновременно и всё это похоже на постоянное дежавю. Все события в миссии методично повторяются из раза в раз. Не работает случайность интервалов.

Настройки скриптовых параметров дефолтные из тестовой миссии.

 

Надо глянуть файл миссии.

 

А если создать на аэродроме солдатиков, чтобы ходили и техперсонал изображали? Можно использовать для трафика наземные юниты?

 

В рамках этого скрипта, думаю, нет

Link to comment
Share on other sites

  • ED Team
Надо глянуть файл миссии.

Рядом с ЛА игрока каждые 10 мин. спавнятся два бота (холодный старт) и улетают. И так из раза в раз. Хотелось бы чтоб каждый бот рождался через случайный промежуток времени из заданного диапазона.

 

--

Так же заметил что некоторые боты исчезают не пройдя маршрут до конца (истекло время жизни). Возможно ли сделать исчезновение при истечении времени жизни по достижении скорости ноль? Если бот остановится на стоянке или остановится перед другим ботом.

[MP] Nevada prop free fly 004.miz

Link to comment
Share on other sites

Рядом с ЛА игрока каждые 10 мин. спавнятся два бота (холодный старт) и улетают. И так из раза в раз. Хотелось бы чтоб каждый бот рождался через случайный промежуток времени из заданного диапазона.

 

--

Так же заметил что некоторые боты исчезают не пройдя маршрут до конца (истекло время жизни). Возможно ли сделать исчезновение при истечении времени жизни по достижении скорости ноль? Если бот остановится на стоянке или остановится перед другим ботом.

 

 

 

Скрипт трактует все маршруты либо как маршрут прибытия либо как отправления. Если типом последней точки маршрута является "Land", то такой маршрут трактуется как маршрут прибытия, во всех остальных случаях - как отправления. В данной миссии у всех маршрутов были заданы и точки взлета и посадки, и все они были отнесены к маршрутам прибытия, где критерием завершения является низкая скорость ЛА. В файле с маршрутами я поменял принадлежность всех маршрутов, и теперь они относятся к маршрутам отправления (сами маршруты не трогал) и критерием их завершения является время в пути (от момента взлёта). В исправленной версии я не заметил особых проблем с исчезновением, а скорее наоборот, с заданным временем на прохождение маршрута отправления DepMaxInt = 1200 и периодом проверки checkInt = 120 в аэропорту Beatty прибывающие самолёты (т.е. те, которые завершали свой маршрут) доезжали до мест парковки и оставались там ещё довольно долго, так что при появлении новых ЛА на том же месте происходило наложение. Поэтому в данном случае я бы придерживался логики скрипта и разделял бы все маршруты на отправления и прибытия и по возможности каждому типу маршрута назначал бы свое парковочное место. В исправленной версии я также изменил количество ЛА, которые могут появиться за один раз maxResp = 3 и после этого случайность интервалов "заработала" или стала заметна. Во вложение я добавил и zzz0002_ATR_GameGUI.lua , чтобы маршруты как в этой миссии определялись бы как маршруты отправления.

[MP] Nevada prop free fly 004Dep.miz

zzz0002_ATR_GameGUI.lua

Link to comment
Share on other sites

  • ED Team
Поэтому в данном случае я бы придерживался логики скрипта и разделял бы все маршруты на отправления и прибытия и по возможности каждому типу маршрута назначал бы свое парковочное место.

Чтобы все маршруты однозначно разделились на отправления и прибытия, надо не использовать маршруты типа взлёт-посадка? Или с новым GUI и такие маршруты всеравно правильно разделятся?

 

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

Link to comment
Share on other sites

Чтобы все маршруты однозначно разделились на отправления и прибытия, надо не использовать маршруты типа взлёт-посадка? Или с новым GUI и такие маршруты всеравно правильно разделятся?

 

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

 

На данный момент чтобы избежать проблемы исчезновений/наложений лучше не создавать маршруты типа взлёт-посадка. С ними будут проблемы как со старым GUI так и с новым (соответсвенно со старым они вообще не работают, а с новым надо искать подходящие значения параметров).

Link to comment
Share on other sites

Хорошый скрипт.. вопрос, можно сделать трафик военный и с вооружением. Спасибо

 

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

Link to comment
Share on other sites

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

Попадания: (100%) приехали......

Link to comment
Share on other sites

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

 

Для того чтобы добавить трафик выполняющий какую-либо боевую задачу, править скрипт не надо. Группы создаются как обычно в Редакторе Миссий (пункты из первого поста). Если требуется чтобы группы добавлялись целиком, а не только первый юнит, то надо править функцию, которая собирает маршруты (в zzz0001_ATR_GameGUI.lua строка 77: function zATR.harvest(MissionTable, fromSide) ) а также функцию, которая добавляет группы во время игры (в AirTraffic_03.lua строка 75: function zAirTraffic.respATU)

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...