Jump to content

BAntDit

Members
  • Posts

    983
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by BAntDit

  1. Для наземки будет несколько по другому. Напишу пример, когда до дома доберусь.
  2. По просьбам трудящихся, скрипт захвата вертолетных площадок с уведомлением коалиций и установкой флагов + миссия-пример. capture_bases.miz capture_heliports.lua
  3. Готов поклясться, что когда я первый раз читал это сообщение, БТР должен был просто динамически создаться, а самолет респауниться и лететь по маршруту :D Возможно всё. -------- Парочка примеров: 1. Пример на MSF, динамическое создание БТР: 1.1. Подключаем MSF 1.2. Выполняем init: mission.controller:start(); через действие DO SCRIPT с условие время больше 1 сек. 1.3. Пишем скрипт динамического создания БТР (на территории авиабазы Сенаки (для примера)) -- динамическое создание БТР: local _spawn_place = Airbase.getByName('Senaki-Kolkhi'); local _spawn_point = _spawn_place:getPoint(); local _units = {}; table.insert(_units, { unitType = 'BTR-80', unitName = 'dynamic_apc_1', playerCanDrive = true, point = { x = _spawn_point.x, y = _spawn_point.z } }); local _apc_group_desc = mission.utils.getGroupDescriptor('dynamic_apc', _spawn_point, _units); local _status, _result = pcall(function() local _apc_group = mission.model:createGroup(Group.Category.GROUND, country.id.RUSSIA, _apc_group_desc); return _apc_group; end); if _status then mission.controller.sendMessageForAll('БТР-80 создан на авиабазе Сенаки'); else mission.controller.sendMessageForAll('Не удалось создать БТР-80 по причине: ' .. assert(_result, 'unknown')); end 1.4. Подключаем написанный скрипт к миссии, через do script file с условие время больше 2 сек. 1.5. Запускаем миссию, смотрим результат БТР создастся через 2 сек. после начала миссии. Пример миссии и файл скрипт приложил - dynamic_apc.miz и dynamic_apc.lua соответственно. 2. Пример на чистом SSE, динамическое создание самолетов с маршрутом. В миссии будет по самолету с каждой стороны и встречными маршрутами, как только один из самолетов будут сбивать - он будет респаунится, возвращаться на маршрут, сходится противником и вести бой и так сколько угодно долго :) 2.1. Создаем в миссии по одному самолету для каждой стороны, задаем для них маршруты, так чтобы они шли на встречу друг другу. 2.2. Создаем скрипт, который будет восстанавливать самолет на прежнем месте и с прежним маршрутом, если его сбили: -- динамическое создание самолетега: local _ru_country, _ru_plane_group, _ru_plane_name = nil, nil, 'dynamic_plane'; local _us_country, _us_plane_group, _us_plane_name = nil, nil, 'dynamic_us_plane'; for _country_index, _country in ipairs(env.mission.coalition.red.country) do if _country.id == country.id.RUSSIA and _country.plane and _country.plane.group then for _group_index, _group in ipairs(_country.plane.group) do if _group.name == 'dynamic_plane' and _group.units then _ru_plane_group = _group; break; end end _ru_country = _country; break; end end for _country_index, _country in ipairs(env.mission.coalition.blue.country) do if _country.id == country.id.USA and _country.plane and _country.plane.group then for _group_index, _group in ipairs(_country.plane.group) do if _group.name == 'dynamic_us_plane' and _group.units then _us_plane_group = _group; break; end end _us_country = _country; break; end end local function respawnPlane(_data) local _status, _result = pcall(function() local _new_group = coalition.addGroup(_data.country, _data.category, _data.descriptor); return _new_group; end); if _status then trigger.action.outText('Группа ' .. _data.descriptor.name .. ' была создана вновь', 5); else trigger.action.outText('Не удалось создать группу ' .. _data.descriptor.name .. ' повторно, выполнение сценария будет завершено', 15); end return nil; end; local customEventHandler = {}; function customEventHandler:onEvent(event) if (world.event.S_EVENT_CRASH == event.id or world.event.S_EVENT_LAND == event.id) then local _status, _name = pcall(function() local _result = event.initiator:getName(); return _result; end); if not _status then env.info('Ошибка: Не удалось получить имя объекта-инициатора события методом getName(), по причине: ' .. assert(_name, 'unknown'), false); _name = ''; local _ru_plane = Unit.getByName('dynamic_plane'); local _us_plane = Unit.getByName('dynamic_us_plane'); if not (_ru_plane and _ru_plane:isExist()) then _name = _ru_plane_name; end if not (_us_plane and _us_plane:isExist()) then _name = _us_plane_name; end if 0 == _name then env.error('Ошибка: Не удалось получить имя объекта-инициатора события, выполнение сценария будет завершено', false); trigger.action.outText('Ошибка: Не удалось получить имя объекта-инициатора события, выполнение сценария будет завершено', 20); return; end end env.info('Имя уничтоженного ЛА: ' .. _name .. ', имя dynamic_plane: ' .. _ru_plane_name .. ', имя dynamic_us_plane: ' .. _us_plane_name, false); if _name == _ru_plane_name then trigger.action.outText('dynamic_plane будет вновь создан через 5 сек.', 5); timer.scheduleFunction(respawnPlane, { country = country.id.RUSSIA, category = Group.Category.AIRPLANE, descriptor = _ru_plane_group }, timer.getTime() + 5); end if _name == _us_plane_name then trigger.action.outText('dynamic_us_plane будет вновь создан через 5 сек.', 5); timer.scheduleFunction(respawnPlane, { country = country.id.USA, category = Group.Category.AIRPLANE, descriptor = _us_plane_group }, timer.getTime() + 5); end if world.event.S_EVENT_LAND == event.id then event.initiator:destroy(); end end end; world.addEventHandler(customEventHandler); 2.3. Подключаем написанный скрипт к миссии через действие do script file c условием время больше 1 сек. 2.4. Запускаем миссию, смотрим на результат - будет бесконечный бой истребителей :) - я сейчас пару часов просидел тупо глядя как боты отчаянно воюют :D Готовою миссию-пример и сам скрипт прилагаю - dynamic_plane.miz и dynamic_plane.lua соответственно. dynamic_apc.miz dynamic_apc.lua dynamic_plane.lua dynamic_plane.miz
  4. где там мой любимый *facepalm*
  5. Это из разряда того, что скриптами лучше даже не пытаться сделать - т.к. это должна быть другая модель повреждений у наземных юнитов.
  6. Делов то на 1 минуту :) onHitEventHandler = {}; function onHitEventHandler:onEvent(event) if (world.event.S_EVENT_HIT == event.id) then if not (event.target and event.target:isExist() and 0 ~= event.target:getLife0()) return; end if (event.target:getLife() / event.target:getLife0()) < 0.25 then -- если остаток здоровья менее 25%: local _controller = event.target:getController(); -- выключить AI: _controller:setOnOff(false); -- trigger.action.outText('Юнит ' .. event.target:getName() .. ' получил тяжелые повреждения и действовать самостоятельно более не способен', 15); end end end; world.addEventHandler(onHitEventHandler); Не уверен только, в том, что AI выключится у отдельного юнита, а не у группы целиком.
  7. Обновил руководство по MSF. В обновленной версии более подробно расписал класс msfUnit. Ссылка на обновленную версию у меня в подписи.
  8. А что должен получать игрок или его коалиция? - перк круговой радар на 5 минут или плюс к максимальной скорости? Возможность заклинания толстая броня? )))
  9. На RAF крутятся вполне нормальные миссии, с участием всего и вся и с обязательным взаимодействием и кучей игроков, проходятся в среднем за 1.5 часа и проходят довольно интересно, все стыкуется, все довольны... - и это все при том, что от текущих возможностей DCS World используется, примерно 20%. -------------- Те кто хотят делать интересные миссии - делают, а то что мало людей, которые могут это делать - это уже другая проблема.
  10. Это какие-то это другие? - я не знаю ни одного online танкового симулятора, их offline-новых то от силы штуки три наберется, да и то один древнее другого.
  11. Обращу ваше внимание на то, что вся эта красота конфликтует с радиоменю по расположению. Вообщем-то уже сейчас индикация направления по азимуту корпуса и башни техники делает радиоменю плохо читаемым, если добавить туда ещё что, то радиоменю будет вообще не читаемым. ----- Есть возможность отключать вывод всей этой индикации при открытии радиоменю? - это был бы идеальный вариант решения проблемы.
  12. Я давно уже начал работать над руководством по использованию MSF для разработки миссий, но виду того, что с момента начала работы на руководством в самом MSF происходили значительные изменения и приходилось много менять и в самом руководстве. Поскольку процесс работы на руководством у меня значительно затянулся, я решил выложить руководство в том виде, в котором оно есть сейчас - оно конечно же не полное и ему далеко до завершения, но полезная информация в нем есть и сейчас. Ссылка на скачивание доступна у меня в подписи. ---- Будет полезно, если в процессе прочтения вы найдете какие-либо ошибки и неточности и сообщите о них мне.
  13. Я предусматривал, вроде, что уничтожение транспорта в группе чистит радиоменю от команд этого транспорта, но пока не проверял работает или нет - если что поправлю. Да есть такое,я вот думаю, по этому случаю в радиоменю ещё добавить запуск сигнальных ракет для каждого транспорта, чтоб можно было выпустить сигнальную ракету и понять что это за юнит. к не ходячим группам нужно подъезжать ближе 20 метров для подбора. Можно, в принципе, слегка увеличить. В меню подбора групп в списке групп последний пункт Конец связи, если его выбрать то список групп для выбора исчезнет и снова появится пункт меню Установить связь с пехотой.
  14. Вчера закончил делать перевозку пехоты на наземном транспорте скриптами (на БТР-ах, на БМП и т.п.), вчера же потестили немного в online - ни че так прикольно, вроде, получилось :) ------ на скриншоте пехота каким образом за броню построена? - я просто думаю делать не делать скриптами, чтобы пехота за броню гоношилась или в CA итак есть такие построения уже?
  15. Теперь информация для пользователей: 1. Радиокоманды в DCS World добавляются не конкретным юнитам, а группам, поэтому заняв любой из юнитов группы с транспортными юнитами вам будут доступны все команды у правления посадкойвысадкой для этой группы. Чтобы было понятно, для какого именно юнита группы вы отдаете команду в имени команды пишется тип юнита и имя этого юнита. 2. Выбор типа группы, который вы будите забирать в погрузочной зоны задается почти также как для вертолетов. Для каждого юнита группы можно указать свой тип побираемой в зоне группы. Все типы доступных групп перечислены в подменю - Пункты подбора десанта - индивидуально для каждого транспортного юнита: 3. Для повторной перевозки ранее высаженных групп или перевозки групп заранее определенных в редакторе, как доступных для перевозки групп, пользователю нужно сделать следующее: 3.1. Через радиоменю связаться с пехотными группами (для каждого юнита группы свой пункт радиоменю для связи с пехотой - выбирайте их в зависимости от того,в какой юнит собираетесь посадить группу): 3.2. После выбора пункта Установить связь, радиоменю закроется и выполнится поиск групп доступных для перевозки в радиусе 500 метров - после чего в радиоменю появится команда для выбора группы на погрузку в соответствующий юнит: 3.3. Если вы не хотите подбирать ни одну из найденных групп, в список доступных групп также добавляется команда Конец связи для возврата меню установки связи. 4. Ввиду того, что радиокоманды назначаются в целом на группу, а не на юниты в отдельности, в то время как разные юниты одной группы могут быть под управлением разных игроков, то может получится так что один игрок сажает группу в юнит, в то время как второй усиленно её высаживает из этого же юнита :D - вы уж сами меж собой решайте кто главнее и кому какие кнопки нажимать :) И вот, видео ролик, пример, использования транспортных юнитов для перевозки пехоты: (смотреть рекомендую в high resolution).
  16. Перевозка юнитов на броне Закончил работу над перевозкой юнитов на наземной технике - БТР-ах, БМП и т.п. Новая версия MSF доступна для скачивания, пока как beta-версия (ссылка у меня в подписи). Постарался сделать так, чтобы реализация была максимально схожа с перевозкой юнитов на вертолетах, однако, для наземки есть свои нюансы в рализации, поэтому будет полезна следующая информация: Информация для разработчиков миссий: 1. Перевозку любых групп можно сделать доступной на любом виде наземного транспорта - все настраивается на усмотрение создателя миссии. Как в ините укажите так и будет. 2. Транспортным юнитом может быть назначен любой юнит группы. Всего в каждой группе может быть до 4-ех транспортных юнитов. 3. Для назначения юнита группы транспортным используйте метод function msfUnit.setTransportTask(self, boolean isTransport). Пример: -- lenta_transport_2 - имя юнита в редакторе -- сделать этот юнит транспортным можно так: mission.model:addUnit('lenta_transport_2'); mission.model.units.lenta_transport_2:setTransportTask(true); 4. Для возможности подбора групп юнитов в погрузочных зонах, для транспортных юнитов нужно добавить шаблоны групп, точно также как это делается для вертолетов. Пример: -- допустим есть погрузочная зона -- _cargo_place_number_1 - номер это зоны -- добавление шаблона подбираемой из этой зоны группы для БТР-80: mission.model.cargoPlaces[_cargo_place_number_1]:addCargoTemplate( 'infantry_2_lite', -- уникальное имя шаблона 'BTR-80', -- тип юнита, для которого доступна погрузка 10, -- число доступных погрузок (столько групп можно будет забрать _units_templates_1, -- юниты шаблона (задаются также как для вертолетов) 10, -- время посадки в секундах 12, -- время высадки в секундах { speedLessThen = 4, command = 0 }, -- условия высадки (высота ессесно не задается) country.id.RUSSIA, -- гос. принадлежность перевозимых групп 'Взвод пехоты'); -- название отображаемое в радиоменю 5. После определения зон погрузки для групп с транспортными юнитами обязательно нужно вызвать метод обновляющий список погрузочных зон в радиоменю (для вертушек это делалось автоматом при первом взлете). Обновить список зон в радиоменю можно так: -- lenta - имя группы в редакторе, в которой есть транспорт -- обновление списка зон выполняется так: mission.model:addGroup('lenta'); mission.model.groups.lenta:renewCargoPlacesList(); 6. Для перевозки групп юнитов, определенных в редакторе заранее на этапе создания миссии, возможность перевозки на заданном типе транспорта задается методом function msfGroup.addAvalibleTransport(self, string unitType) Пример: -- alpha - имя группы, созданной в редакторе -- сделать эту группу доступной для перевозки на БТР-80, можно так: mission.model.groups.alpha:addAvalibleTransport('BTR-80'); -------------- Если что-то не понятно, см. пример в приложенной к посту миссии: cargo_moving_example.miz
  17. На RAF-е уже перешли на новый MSF - ни у кого ничего не тормозит, только что зашел, полетал. ------------ P.S.: завтра вечером я буду в ТС-е РАФ-а, если проблема будет ещё актуальна - заходите, попробую помочь.
  18. 1. Изменения в крайней версии коснулись только погрузки\высадки десанта и самые тяжелые части скрипта отрабатывают только в момент посадки и высадки соответственно - они не могут устраивать слайдшоу никак. 2. На моем хилом компьютере слайдшоу при тестировании не было. Число пользователей на производительность MSF почти не влияет.
  19. все что покалечило я уже оперативно исправил :) - ссылка на обновленную версию MSF у меня в подписи, т.е. просто замените старый скрипт msf.lua на новый в своих миссиях и все будет работать В смысле? Сейчас я занят реализацией перевозки юнитов на броне, потом ещё может сделаю, чтобы спешенные юниты могли прятаться за броней и тихонько следовать под её прикрытием (пока не знаю получится или нет). Вот как это закончу, посмотрю что дальше, может это будет и ПВО...
  20. Нет. Добро пожаловать в реальность. Метки чудом появляются на карте только в фильмах фантастики.
  21. Подозревало. Об этом мне напоминали и в online, причем не наземщики, а вертолетчики. По моему мнению на карте должно быть скрыто абсолютно все. Целеуказание должно выдаваться либо текстовыми сообщениями, либо по радиоканалу. Все остальное чит. Нет - ибо нафик. Для чего мне сохранять настройки ППМ группы, если вертолетчик увез эту группу на 100500 км. Тоже самое относится к таким задачам как огонь по точке и т.п. Никто не мешает при высадке дать группе новый маршрут, новые задачи, новые настройки - событие высадки перехватывается, высаженная группа и перевозивший её транспорт - это фактические аргументы обработчика события.
  22. Чтобы не было вот такого: Вроде как многим это не нравилось.
  23. В связи с выходом новой версии DCS World 1.2.5. выложил новую версию MSF. (ссылку см. у меня в подписи). Изменения в новой версии следующие: 1. Перевозка пехоты на транспортных вертолетах исправлена с учетом новых изменений в SSE 1.2.5. (Старая версия не будет корректно работать в версии 1.2.5.) 2. Исправлена ошибка: юниты высаженные с транспортного вертолета больше не будут видны на виде F10 для вражеских командиров наземных войск. ------ Для перехода на новую версию в ваших миссиях достаточно заменить старый скрипт msf.lua на новый и все будет работать.
  24. Но тем не менее: "Обнаружить цель, получить координаты соответствующие её расположению, передать координаты, получить координаты остальными летчиками, найти на карте позицию соответствующую её координатам" Не равно "Поставил на карте метку - её увидели все"
  25. Да, это возможно. Подробней позже напишу и в другой ветке, ато в этой не в тем как-то будет...
×
×
  • Create New...