-
Posts
983 -
Joined
-
Last visited
-
Days Won
4
Content Type
Profiles
Forums
Events
Everything posted by BAntDit
-
1. Поправил этот баг - сейчас зацикливаться не должно. 2. Добавил вывод процента завершенности процессов погрузки \ разгрузки. 3. Добавил возможность высадки десанта по радио команде. Кстати, у меня почему-то меню радио команд доступно только если я приземлился, в воздухе не открывается. ---------- Ещё много чего по мелочи поменял, так что не плохо бы снова протестировать. P.S.: я пока локально тестировал, столько вертолетов разбил, что теперь мне кажется, что каждый раз, когда я снова сажусь в Huey у второго пилота лицо грустное становится :) cargo_moving_test.miz
-
Мне бы сейчас получить данные от тех, кто пробовал летать как клиент - создается группа при высадке или нет. Если создается, то зашибись - дальше можно будет переделывать как угодно, хоть с радиоменю, хоть без него. У меня сервер кстати запущен сейчас.
-
Я давно не заглядывал в возможности управления радиоменю скриптами, видимо поэтому упустил это. Спасибо, буду пользоваться. Wow, вообще то у меня там проверка, чтобы внутри Cargo place высадка была не возможна. И у меня она работала нормально - а это случилось при полете на клиенте или на сервере? Самое интересное, что я был так уверен, что эта проверка работает 100%, что даже запись отладочной информации из неё убрал :) - сейчас попробую разобраться в причине. Седне начну переделывать высадку через радиокомманды, потом потом погрузку.
-
Можно, но вообще я специально старался сделать реализацию не зависимою от радиоменю, по некоторым причинам: 1. Мне не очень нравится радиоменю, т.к. оно завязывается на флаги (а хотелось бы, чтобы вместо флагов были callback функции c соответствующими аргументами) 2. Не удобно копаться в радиоменю одновременно удерживая вертолет в висении :) -------------------------------- Сейчас это тоже возможно, можно создать несколько Cargo place-ов (мест погрузки) - одну для загрузки ПЗРК, другую для автоматчиков и т.д. Над какой игрок зависнет, такой отряд и загрузит. -------------------- Для погрузки выгрузки пехоты в БТР-ы, кстати, по любому радиоменю буду использовать, там без вариантов - посмотрим, если окажется удобно, сделаю также для вертушек. Сейчас главное протестировать то, что есть - как уже говорил используется куча функции, которые в Online ещё не тестировались. -------------------- Нет, на аэродинамику скриптом я влиять не могу. В скрипте просто проверяется, что одновременно может быть загружен всего один отряд в вертолет. Если пилот подобрал отряд, то другой он не подберет, пока не выгрузит уже подобранный. Вообще, я сделал так: Cargo place настраивается в скрипте - т.е. задается шаблон перевозимого груза (отряда), может ли UH-1 реально перевозить такой груз, который задан в шаблоне - это остается на совести миссиодела - какие шаблоны укажет создатель миссии, такие грузы вертушка и будет возить. Кстати я свой сервак тестовый не могу держать постоянно запущенным, так что если у кого-то есть возможность запустить эту тестовую миссию у себя, тоже было бы не плохо.
-
Все готово! Сделал миссию для возможности транспортировки грузов и пехоты на UH-1H. Изначально собирался сделать и для БТР-ов, но пока только для вертолетов (для БТР-ов перевозку пехоты тоже уже так то сделал, но пока не тестировал). Прежде чем, объяснять как это работает и как добавлять в ваши миссии, предлагают хорошенько протестировать предлагаемый механизм в online-е. Я сейчас все протестировал локально, есть мелкие не дочеты, но вцелом все работает. Очень важно протеcтировать механизм Online так он использует большое количество функции SSE, которые в Online ещё ни разу не тестировались... Для тестирования я запустил миссию на своем сервере (BAntDit Test Server), а также прикрепил миссию к этому посту - если хотите, можете запустить миссию на своем сервере. Не большое описание тестовой миссии с картинками: 1. В миссии вам доступно 4 слота с вертушками UH-1H на аэродроме Сенаки. 2. В тестовой миссии вам предлагается перевозить отряд пехоты с минометами: 5 человек + 2 миномета (в тесноте да не в обиде :) ) Прежде чем кого-то куда то везти, нужно подобрать тех, кого вы собираетесь перевозить. Не далеко от аэродрома расположил небольшую базу - белый барак, вышка, пехота, техника. Эта база - cargo place, т.е. самое место, где можно подобрать отряд для десантирования. См. скрины: Для того, чтобы подобрать отряд для перевозки вы должны зависнуть на высоте не более 4 меторов в зоне Cargo place (в радиусе 150 метров от вышки). 3. Если все сделали правильно то увидите надпись: Если не правильно, то тоже увидите, но другую :) - будет, что типа: "Погрузка прервана, высота не удерживается." (загрузка длится примерно 20 сек., когда стараешься удерживать 20 секунд вертушку ровно - это время кажется вечностью :) ) Удерживайте вертолет ровно, пока не выйдет надпись, что погрузка завершена: 4. После погрузки можете лететь куда угодно,выбирать место где хотите высадить отряд. Для того, чтобы высадить отряд, нужно также зависнуть на высоте не более 4 метров, следить чтобы скорость не превысила 5 м/c. (выгрузка потребует примерно также 20 сек.) Также будут отображаться надписи со статусом выгрузки. Если что-то пойдет не так - вы об узнаете: Если все пройдет нормально. Рядом с вашей вертушкой будет создан отряд: ----------------------- Вообщем-то все, успехов в тестировании :joystick: - лично я разбил штук 50 вертушек, прежде чем у меня стало получаться ))) В online даже страшновато тестировать, боюсь багов сперва полезет не мало... Миссия прикреплена к посту. cargo_moving_test.miz
-
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Да, все правильно - просто увеличьте интервалы :) Также советую менять оба интервала на одинаковую величину, чтобы не получилось, что сообщения перекрывают друг друга. -
Я сейчас занимаюсь этим. Можно будет перевозить пехоту куда угодно как в Huey так и в БТР-ах.
-
Вроде как при динамическом создании техники можно создать любую технику для любой страны. Правда сам ещё не пробовал такое делать...
-
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Да, есть. Со scenery objects пока сам мало работал... -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Примеры, которые обещал: 1) Для примера будем считать, что в миссии у нас есть группа бронетехники с именем: yankee. Условия разбита ли группа, есть ли в ней поврежденные юниты будут проверять по этой группе. 2) Для примера также возьмем группу танков с именем panzer_1 - для этой группы в расширенных действиях ППМ поставим условие - не двигаться дальше, пока группа yankee не разбита. 3) И для примера возьмем группу танков с именем panzer_2 - для этой группы в расширенных действиях ППМ поставим условие - не двигаться дальше, пока в группе yankee не появятся уничтоженные или поврежденные юниты. Пример №1: По поводу условий окончания ожидания сразу скажу: в версии 1.2.4. Stop Conditions (условия завершения) заданные через Lua выражения не работают. Но беды в этой никакой нет, вместо того, чтобы использовать Stop Conditions возможно использовать timer.scheduleFunction (см. тут http://en.wiki.eagle.ru/wiki/Drafts/Simulator_Scripting_Engine_(1.2.4)/Part_1#timer), более того scheduleFunction гораздо эффективнее по производительности, чем Stop Conditions. Вот, собственно пример скрипта, заставляющий группу остановится в ожидании уничтожения другой: local _panzer = Group.getByName('panzer_1'); local _controller = _panzer:getController(); -- для группы panzer_1 добавляем задачу стоять: _controller:pushTask({ id = 'Hold', params = {} }); -- и тут же добавляем scheduleFunction с проверкой, когда -- можно выдвигаться дальше (в данном случае проверяем, не уничтожена ли группа _yankee): timer.scheduleFunction(function(_argument) local _yankee = Group.getByName('yankee'); -- получаем группу yankee по имени if _yankee and _yankee:isExist() then -- проверяем существует ли такая группа -- если существует, получаем кол-во юнитов в группе в данный момент. local _yankee_units = _yankee:getUnits(); if #_yankee_units > 0 then -- если в данный момент число юнитов > 0, то повторим проверку через 2 сек. return (timer.getTime() + 2); end end -- если группа не существует или число юнитов в ней 0, то: trigger.action.outText('Panzer 1: выдвигаемся вперед', 10); -- выводим сообщение _argument.controller:popTask(); -- удаляем задачу, заставляющую группу стоять return nill; -- больше не выполняем проверки. end, { controller = _controller}, timer.getTime() + 2); Данный скрипт нужно разместить в расширенных действиях нужного вам ППМ, используя Prefom Command - Run Script: (примечание: для объяснения принципа работы я написал комментарии в скрипте, в редакторе же при размещении скрипта внутри команды RunScrit однострочные комментарии использовать нельзя!) Пример №2: Тут принцип точно такой же, только проверка иная, сразу привожу пример скрипта: local _panzer = Group.getByName('panzer_2'); local _controller = _panzer:getController(); _controller:pushTask({ id = 'Hold', params = {} }); -- задача для panzer_2 остановится. -- scheduleFunction выполняющая проверку, когда panzer_2 может продолжить -- движение timer.scheduleFunction(function(_argument) local _yankee = Group.getByName('yankee'); -- получить группу yankee по имени if _yankee and _yankee:isExist() then -- проверить существует ли эта группа local _yankee_units = _yankee:getUnits(); -- получить тек. юниты local _yankee_size = _yankee:getSize(); -- получить стартовое число юнитов -- сравниваем тек. число юнитов со стартовым числом if #_yankee_units == _yankee_size then -- если число юнитов прежнее, проверяем нет ли среди них поврежденных local _has_dammage = false; for _i = 1, #_yankee_units do -- у каждого юнита сравниваем стартовый Life Bar c текущим: if _yankee_units[_i]:getLife() < _yankee_units[_i]:getLife0() then _has_dammage = true; break; end end -- если все проверки пройдены, т.е. если число юнитов = стартовому -- и никто из юнитов не покоцан, то повторим проверку через 2 сек. if not _has_dammage then return (timer.getTime() + 2); end end end -- если какая-то из проверок не прошла, значит кого-то замочили -- или покоцали: trigger.action.outText('Panzer 2: выдвигаемся вперед', 10); -- выводим сообщение _argument.controller:popTask(); -- удаляем задачу ожидания return nill; -- проверки больше не выполняем. end, { controller = _controller}, timer.getTime() + 2); Выполнить скрипт в нужной ППМ можно также используя Prefom Command - Run Script. Пример №3: Ну тут уж совсем просто. Допустим отправка сообщения для группы yankee: Сообщение увидят пользователи, у которых под управлением один из юнитов группы yankee. Сообщение будет видно в течение 15 сек. ----------- Прикрепил миссию-пример к посту. В ней все как и описал выше - группа Pnazer_1 будет ожидать в ППМ №1, пока противник не уничтожит группу yankee, группа Panzer_2 будет ожидать в точке ППМ №1 пока один из юнитов yankee не получит повреждений. examples.miz -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
ok, я выложу примеру чуть позжее... ато седне меня на работе закидали задачами... -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Меня попросили сделать перевод скрипта учета потерь на английский и миссию пример к нему. Готово: ----------------------------------------- I translated script for counting casualties of aircrafts, vehicles and infantry. My english is not well enough, and may be i did some mistakes in translation. I would be appreciated if somebody can correct my translation. Script and sample mission attached to post below. To use script in your missions, you need to use trigger "MISSION START" and action "DO SCRIPT FILE" (screenshot below). counter_casualty.lua counter_casualty.miz -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
тогда тоже с определенной периодичностью надо будет проверять скорость, что не очень хорошо, но попробовать можно - как появится время сделаю. -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Доработал скрипт подсчета потерь: 1. Сделал, чтобы в одном скрипте велся подсчет ЛА, пилотов и наземки (танков, пехоты, БМП-шек). 2. Чтобы сообщения не были громоздкими, сделал чтобы информация по наземке выводилась отдельным сообщением. 3. Раньше информация выводилась, если разбивался ЛА или погибал пилот (вызывалась функция showCasualties тригеерами) - сейчас не надо никаких триггеров, нужно просто один раз запустить скрипт. Информация сейчас выводится автоматически раз в 5 мин., сначала выводится по ЛА, потом по наземке. counter_casualty4.lua counter_casualty4.miz -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Нет, такой возможности нет. По крайне мере с помощью SSE, по крайней мере сейчас. -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Сейчас проверил - не получилось :( События S_EVENT_REFUELING и S_EVENT_REFUELING_STOP - только для дозаправки в воздухе. Подогнать к самолету технику я вообщем то могу без проблем, но без нужных событий я не могу определить в какой момент её подогнать,а в какой момент она должна отъехать... - т.е. нельзя определить заправляется сейчас борт или нет, в этом весь облом. ----------------- В принципе, у меня ещё есть вариант в запасе - можно с определенной периодичностью проверять в воздухе самолет или нет, и если не в воздухе и топливо у него изменяется в большую строну, то значит заправляется - значит подгонять технику, но этот вариант какой-то дурацкий и сточки зрения производительности и смотреться криво будет - т.е. техника будет подкатывать не сразу, а через сек 15, после начала заправки... - думаю это совсем не то, что надо... -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Не могу точно сказать - это нужно завязываться на события S_EVENT_REFUELING и S_EVENT_REFUELING_STOP скорее всего, но я на память не помню - они срабатывают тока при дозаправке в воздухе или на земле тоже... нужно проверять, вообщем. ------ Мысль интересная, сейчас быстренько набросаю миссию, проверю как работать будет - может и получится... . -
--------------------------- Готово. Выложил пример BTR Racing :) - http://forums.eagle.ru/showpost.php?p=1728782&postcount=54
-
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Собсно, по просьбам трудящихся. Миссия-пример динамического задания маршрутов для наземки. Чтобы показать динамическое задание маршрута накидал маленький пример BTR Racing :) - в миссии в вашем распоряжении БТР-80, а группа противника Yankee Patrol будет автоматически определять ваше место положение и динамически строить маршрут так, чтобы добраться до вас. Получилось забавно :) - лучше не стоять на месте, а то догонят и наваляют ))) Группе противника скорость задал среднюю, но зато стреляют они далеко, так что на месте стоять не придется ) --------------------------- В миссии используется SSE 1.2.3 + MSF. В данной миссии для задания движения (преследования) использовал следующий скрипт: - в комментариях все подробно написано, чтобы можно было разобраться: -- добавление групп управляемых, через MSF: mission.model:addGroup('yankee_patrol'); -- добавление юнитов, управляемых через MSF: mission.model:addUnit('player_vehicle_1'); ------------------------------------------------- -- старт MSF mission.controller:start(); ------------------------------------------------- -- обработчик события прибытия в точку: -- (примечание: обработчик не сработает, если в процессе движения к одной точке, -- была получена задача выдвигаться к другой. По сути он сработает, когда задача перестанет выполнятся, т.е. -- когда БТР догонят и завалят) function onMoveOnEventHandler(sender, eventArgs) mission.model.messages.push('Группа ' .. eventArgs.movingGroup:getGroupName() .. ' выдвигается к точке ' .. sender:getName()); end; -- обработчик события начала движения к новой точке: function onReachEventHandler(sender, eventArgs) mission.model.messages.push('Группа ' .. eventArgs.arrivedGroup:getGroupName() .. ' достигла точки ' .. sender:getName()); end; -- функция постановки задачи движения к объекту, переданному в аргументе: local function _moveToBtrTask(_btr) -- проверка жив ли БТР: if not _btr:isAlive() then mission.model.messages.push('На связи группа ' .. mission.model.groups.yankee_patrol:getGroupName() .. '. Преследуемая группа уничтожена'); return nil; -- завершение преследования, если не жив end mission.model.groups.yankee_patrol:removeFirstWayPoint(); -- чтобы не плодить waypoint-ы local _status, _result = pcall(function() mission.model.messages.push('На связи группа ' .. mission.model.groups.yankee_patrol:getGroupName() .. ' ведем преследование.'); local _new_wp_status, _new_waypoint = mission.model.groups.yankee_patrol:moveToObject( _btr:getDCSWorldUnit() -- двигаться к БТР-у (объект, которому нужно двигаться) , 12 -- со скоростью 12 м/c , 'Off Road' -- двигаться вне дороги , onReachEventHandler -- onReachEventHandler - выполнить по прибытии , onMoveOnEventHandler -- onMoveOnEventHandler - выполнить в начале движения ); if not _new_wp_status then return true; end return false; end); if _result then -- если преследование закончено: return nil; -- перестаем перенаводить группу end if not _status then -- если что-то пошло не так: if _result then mission.model.messages.push('_moveToBtrTask error: ' .. _result); env.error('_moveToBtrTask error: ' .. _result, false); else mission.model.messages.push('_moveToBtrTask error: что-то сломалось... '); env.error('_moveToBtrTask error: что-то сломалось... ', false); end return nil; -- завершить задачу end -- если преследование продолжается: return timer.getTime() + 10; -- перенавести группу на новую точку через 10 сек. end; -- добавляем задачу преследования: mission.model.groups.yankee_patrol:addTask('racing' -- имя задачи , _moveToBtrTask -- собсно сама задача (функция ставящая задачу) , mission.model.units.player_vehicle_1 -- аргумент (юнит-цель преследования) , timer.getTime() + 5); -- запуск через 5 сек. c момента выполнения этого скрипта К посту прикрепил миссию и msf.lua --------------- Если пример не понятен, можете описать мне пример, который вы хотите реализовать в своей миссии и скиньте заготовку миссии - тогда я реализую конкретно ваш случай. -------------------- btr_racing.miz -
1. В версии 1.2.3 нет. 2. Можно. Скриптами можно динамически задать любой маршрут (если интересно могу выложить пример). 3. Можно, но в версии 1.2.3 это очень условно (например я сейчас делаю проверку расстояния от ЛА до РЛС с учетом высоты и с учетом не скрылся ли ЛА за неровностями рельефа). 4. Детектировать место гибели юнита можно. 5. Не знаю :)
-
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Приветствую, Я тут для своих нужд некоторые фичи для артиллерии реализовывал, получилось довольно прикольно, поэтому решил поделиться с остальными, может кому-то пригодится для созданий миссии. Постарался, чтобы реализация была универсальной и легко встраивалась в любую миссию. Для начала перечисляю фичи, которые реализовал: 1. Реализовал артиллерию, которая самостоятельно может получать данные от арт. наводчиков, самостоятельно выбирать цель для атаки и обстреливать её. 2. Реализовал собственно и самого Artillery Observer (арт наводчик) - роль арт наводчика можете назначить для любого наземного юнита или ЛА под управлением AI (на использование ЛА под управлением игрока пока не расcчитано). Арт наводчик будет сообщать обо всех группах противника, которые попали в его поле зрения и артиллерия будет работать по ним, если они в зоне досягаемости. 3. Реализовал возможность артиллерии дать залп дымовыми снарядами по обнаруженной группе. 4. В зависимости от передвижений противника арт. наводчики или обнаруживают группы, или теряют их из вида. Если группа противника скрылась из области обзора арт. наводчика, но тот уже сообщил о ней, то артиллерия будет работать по месту, в которой группа противника была последний раз замечена. 5. Реализовал возможность добавить артиллерии фиксированный список целей, тогда артиллерия будет без всяких наводчиков работать по ним, если цели в зоне досягаемости и если они ещё живые :) Скрипты реализовал максимально универсально, работают на любых юнитах из раздела Artillery. Я тестировал на Мста, Паладинах и Минометах, в качестве наводчиков пробовал использовать БПЛА, брдм-2 и Ми-8. Все работало отлично. -------------------------------------------------------------------------- Как пользоваться: (я тут прикрепил к посту пример миссии, описание сделаю по нему, чтобы было понятней). 1. Нужно скачать скрипт msf.lua (прикрепил к посту, скачивайте самую последнюю - крайнюю версию MSF) - скрипт здоровый, так как содержит все мои наработки, так чтобы их можно было перенести в любую миссию ( в том числе и то, что начал делать по ПВО, и никак не получается закончить :) ) 2. Скрипт нужно подключить к миссии, через триггер MISSION START (СТАРТ МИССИИ). Вот так: 3. Далее вам нужно определиться, кто будет артиллерией, т.е. выбрать для этого нужные группы. В моем примере это группа - artillery (имя группы в редакторе). 4. Далее вам нужно определиться, кого вы хотите сделать наводчиками. В моем примере это беспилотник - air_artillery_observer_1 (имя юнита в редакторе) И HMMWV c пулеметом - artillery_observer_10 - это один из юнитов группы artillery, видит он гораздо меньше БПЛА, но лишняя пара глаз не помешает. 5. Нужно написать init-скрипт. В моем примере он такой (читайте комментарии и все будет понятно): В вашей миссии, он будет свои, если у вас будут другие имена групп артиллерии и наводчиков артиллерии. init.lua: -- добавление групп управляемых через MSF -- добавляем группу артиллерии: mission.model:addGroup('artillery'); -- беспилотник: mission.model:addGroup('air_artillery_observer'); -- добавление юнитов управляемых через MSF -- наводчики: mission.model:addUnit('artillery_observer_10'); mission.model:addUnit('air_artillery_observer_1'); -- запуск MSF: mission.controller:start(); -- список целей для артиллерии -- я оставляю его пустым, так как цели будут добавляться автоматически от БПЛА, и наземного наводчика, -- но при желании можно предопределить список целей вручную local _artillery_targets_list = {}; -- назначение наводчиков: mission.model.groups.artillery:addArtilleryObserver(mission.model.units.artillery_observer_10, 5000); -- назменый наводчик будет видеть на 5 км mission.model.groups.artillery:addArtilleryObserver(mission.model.units.air_artillery_observer_1, 25000); -- БПЛА будет отыскивать их на 25 км -- запрос артилерии: mission.model.groups.artillery:requestArtilleryOnTargets(_artillery_targets_list, -- список целей (пустой) { maximalDistance = 28000 -- метры: максимальная дальность стрельбы , minimal = 250 -- метры: минимальный разброс при лучшем прицеливании (т.е. снаряды будут падать в радиусе 0-250 от точки прицеливания) , maximal = 1250 }, -- метры: случайный разброс (реализованы случайные косяки прицеливания, можно присвоить 0). 200, -- секунды: время работы по одной группе целей (время между перенацеливаниями), не рекомендую ставить меньше 3 минут -- иначе артилерия не успевает наводится 20, -- секунды: начальная задержка, время от старта комманды до начала прицеливания true); -- первые два снаряда дымовые (первый залп дымовыми, для маркировки целей дальше работа ОФС) (ставте false, если -- не нужны дымы). Скрипт лучше запустить с первой или второй секунды миссии, через триггер 1 ONCE (ОДИН РАЗ) 6. С определенной периодичностью или при определенных условиях обновлять список целей: mission.model.groups.artillery:requestTargetsForArtillery(); -- запрос у наводчиков Лучше сделать это как это сделано у меня - запрос целей при подготовке к стрельбе (обработчиком события onPrepareToShot - см. пример ниже.) Вообще-то этого уже достаточно для работы, но в дополнение вы можете также подписаться на события, которые возникают в процессе работы артиллерии и назначить обработчики этих событий. Другими словами вы будете знать, когда артиллерия целится, стреляет, получает данные о цели и т.п. В моем примере подписка сделана на следующие события: (в комментариях все написано). artillery.lua -- Это скрипт содержит набор обработчиков событий, возникающих при работе артиллерии -- и наводчиков артиллерии. В основном это код, который выводит информацию о том, что происходит - -- мне это было нужно для отладки. Вы можете изменить его на свое усмотрение, чтобы выводить -- информацию более похожую на радио обмен наводчиков и артиллеристов. -- методы-обработчики: -- обработка события готовности наведения на цель: function artillery_onReadyToShot_EventHandler(sender, eventArgs) local _report = 'Цель: ' .. eventArgs.target:getName() .. '\n\r'; _report = _report .. 'Угломер: ' .. eventArgs.protractor.ext .. ' - ' .. eventArgs.protractor.int .. '\n\r'; _report = _report .. 'Дальность: ' .. eventArgs.distance .. '\n\r'; _report = _report .. 'Два снаряда дымовыми, огонь! - дальше подкорректирую.'; mission.model.messages.push(_report); end; -- обработка события получения данных о целях: -- собсно самый полезный обработчик - я тут цели запрашиваю function artillery_onPrepareToShot_EventHandler(sender, eventArgs) local _count_targets = sender:requestTargetsForArtillery(); if _count_targets > 0 then mission.model.messages.push('Цели получены. Батарее открыть огонь.'); else mission.model.messages.push('Цели не обнаружены.'); end end; -- обработка события обнаружения цели: function artillery_observer_onEnemySpotted_EventHandler(sender, eventArgs) local _report = sender:getUnitName() .. ' на связи: \n\r'; local _dcsw_target_group = eventArgs.group:getDCSWorldGroup(); local _target_units = _dcsw_target_group:getUnits(); if eventArgs.isNew then _report = _report .. 'обнаружена новая группа целей: ' .. _dcsw_target_group:getName() .. '.'; else _report = _report .. 'наблюдаю группу целей: ' .. _dcsw_target_group:getName() .. '.'; end _report = _report .. ' Число единиц: ' .. #_target_units; mission.model.messages.push(_report); end; -- обработка события потери визуального контакта с целью: function artillery_observer_onLostVisualContact_EventHandler(sender, eventArgs) local _report = sender:getUnitName() .. ' на связи: \n\r'; local _dcsw_target_group = eventArgs.group:getDCSWorldGroup(); local _report = _report .. 'цель: ' .. _dcsw_target_group:getName() .. ' вне зоны видимости.'; mission.model.messages.push(_report); end; -- подписываемся на нужные события: -- артиллерию подписываем на события подготовки к стрельбе и готовности к стрельбе: mission.model.groups.artillery:addOnReadyToShot(artillery_onReadyToShot_EventHandler); mission.model.groups.artillery:addOnPrepareToShot(artillery_onPrepareToShot_EventHandler); -- наводчиков подписываем на события обнаружения цели и потери визуального контакта с целью: mission.model.units.artillery_observer_10:addOnEnemySpotted(artillery_observer_onEnemySpotted_EventHandler); mission.model.units.air_artillery_observer_1:addOnEnemySpotted(artillery_observer_onEnemySpotted_EventHandler); mission.model.units.air_artillery_observer_1:addOnLostVisualContact(artillery_observer_onLostVisualContact_EventHandler); -- для наземного наводчика убрал подписку на событие потери цели, ато он постоянно будет орать, что ничего не видит ))) -- если хотите можете убрать комментарий с последней строчки (радиус обзора ему тогда побольше стоит поставить) -- mission.model.units.artillery_observer_10:addOnLostVisualContact(artillery_observer_onLostVisualContact_EventHandler); Обработчики событий должны привязываться после инициализации, поэтому скрипт должен запускаться после инициализации в моем случае с 4 секунды. Известные недочеты сейчас такие: 1. Артиллерия плохо работает по движущимся группам, не успевает накрыть - позже я планирую научить их брать упреждение с учетом направления движения и скорости движения. (и если группа будет скрываться из области видимости наводчика, артуха сама будет корректироваться по определенному на тот момент направлению движения - это должно быть круто). 2. У меня вывод сообщений идет в порядке очереди, чтобы сообщения не перекрывали друг друга, и иногда очередь отстает от реально происходящих действий - сделаю потом возможность регулировать скорость очереди. -------------- Вот собсно все. Миссия-прикреплена к посту. Если что-то не понятно, как использовать эти возможности в ваших миссиях спрашивайте. artillery_demo.miz -
Разработка миссии на основе Simulator Scripting Engine
BAntDit replied to BAntDit's topic in Треки, Миссии и Кампании
Проблематично, но можно. Использовать для этого менеджер ресурсов пока нельзя. Но можно реализовать свою логику скриптами отдельно для каждого аэродрома и типа самолета. Я уже это делал и проблема была следующая: как ограничить занятие ЛА, если количество для данного типа ЛА = 0? - т.е. реализовать можно, но это будет работать кривовато. Появятся новые возможности в новых версиях, тогда посмотрим. -
А! Все, сам разобрался кажется. Сразу не обратил внимание на название параметров. Если правильно понял: сейчас можно у одной и той же группы задать несколько вариантов и в игре появится один из них с заданной вероятностью. --------- Если я правильно понял, то возможность полезная - правда пока не проверил правильно я понял или нет...
-
1. Вопрос по поводу снабжения юнитов, а именно вот по этой фиче: Грузовики снабжения должны обязательно входить в группу, которую они должны снабжать или снабжают любую группу в радиусе 100 метров. Можно узнать список юнитов грузовиков, которые могут вести снабжение? 2. В редакторе появилась пара новых не понятных параметра в настройках групп: $variantIndex и $variantProbability - что это за параметры?
-
В этом случае будут не доступны команды, появившиеся в World-е - например, Alt + ' вызов менеджера ресурсов и т.п. Но перенести все равно можно. Не сочтите за извращенца, но я для этого Subversion использовал :) - зачекинил старый и новый скрипт инпута в репозиторий, а потом по show difference вывел разницу и сформировал новый файл инпут скрипта со старыми настройками и новыми командами.