Jump to content

BAntDit

Members
  • Posts

    983
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by BAntDit

  1. Нет, можно где угодно. Да. См. это сообщение: http://forums.eagle.ru/showpost.php?p=1825944&postcount=160 - пункт 3 и пункт 6 то, что для этого нужно. Там написано для наземки, но это все работает и для вертушек. Создать зону погрузки динамически тоже можно, но не нужно.
  2. Кстати почитал сейчас хотелки в других темах, многие из них реализуются на SSE... Вот что планирую добавить в связи с этим: 1. Добавлю возможность для CargoPlaces загружаться минами. 2. Добавлю возможность минирования с воздуха (с наземки можно тоже сделать, только не знаю нужно или нет). 3. Добавлю саперов и возможность их перевозить. -------------- Не знаю только когда все это успею с реализацией ПВО как-то застрял.
  3. А это кстати уже, скорее всего, баг самого DCS World-а, спасибо - я раньше не сталкивался. Буду дома, сделаю отдельную миссию для воспроизведения и отрепортю, если воспроизведется. Ошибка кстати из скрипта MSF вылетает, нужно прежде всего проверить есть такая, если отключить MSF или нет...
  4. Да, timer.scheduleFunction одна из самых полезных функций SSE. Небольшой совет при работе с timer.scheduleFunction: При выполнении schedule function любая возникшая внутри ошибка никак себя не проявит, т.е. в случае ошибки код внутри schedule function просто молча не выполнится, никаким образом не сообщив об этом пользователю и не записав информацию в лог, поэтому я рекомендую для кода внутри schedule function использовать безопасные вызовы pcall или xpcall. Пример: timer.scheduleFunction(function(_data) local _status, _result = pcall(function() -- .. тут внутри pcall ваш полезный код... end); if not _status then -- если ошибка внутри pcall trigger.action.outText('ERROR: ' .. assert(_result, 'unknown reason'), 20); -- сообщаем пользователю env.error('ERROR: ' .. assert(_result, 'unknown reason'), false); -- записываем в лог return nil; -- завершаем работу функции. end return timer.getTime() + 2; end, { rescuerName = 'heli1', pilotName = 'a10c_pilot'}, timer.getTime() + 5);
  5. Нет, оно есть. 1. Во-первых: В триггерных условиях есть Lua предикат, в котором можно выполнить: local _group = Group.getByName('your_group_name'); if not (_group and _group:isExist()) then return false; end local _controller = _group:getController(); local _targets = _controller:getDetectedTargets(); for _index, _target in ipairs(_targets) do if _target.visible then return true; end -- вижу врага!!! end return false; -- не вижу врага... При желании вы даже можете определять каким конкретно сенсером одни юниты в данный момент видят других. Так что все есть. (примечания: комментарии в скрипте для понимания - в предикат запихивать код с комментариями нельзя.) 2. Во-вторых, то что я написал выше, даже это не самый лучший вариант, потому что логика запихнута в триггерное условие. Каждый миссиодел должен понимать, что каждое триггерное условие отрабатывает каждый кадр игры. Влепили 100 условий в триггерах - все 100 будут конкретно грузить ваш сервер, в лучшем случае пока не выполняться, в худшем всю игру. Чем тяжелее вы нагрузили сервак тем быстрее он вам скажет "Привет", а клиентам "Пока". - оно вам надо?! - при том, что в вашем распоряжении есть на много более эффективная альтернатива: schedule functions (http://en.wiki.eagle.ru/wiki/Part_1#timer). В schedule functions можете запихнуть все проверки любой сложности и задать нужную периодичность их выполнения - эффективность будет на много выше. Так что, господа миссиоделы, за вами выбор, что использовать новые высокоэффективные решения или использовать старые костыли. Если ваш выбор старые костыли, то бог вам судья :) --------------------- IMHO: Импрувить триггерную систему больше не нужно, её возможностей уже достаточно - ибо новые костыли = новые баги + большая вероятность сломать то, что работает. Тестить перед каждым патчем вагон триггерных условий и действий, в разном сочетании как-то совсем не прикольно, а потом читать остроты - типа "че вы баг прощёлкали", "миссии сломались" и т.п. Помните, что каждая хотелка, которая дублирует то что уже есть - это большая вероятность сломать то, что итак хорошо работает
  6. Ну вот - что-то типа Авиадартса... А авиабиатлон как-то не представляется реализуемым с точки зрения скоростного прохождения маршрута - что будет, если какой-то азартный пилот все топло сожжет на форсаже ко второму ППМ-у? :)
  7. Так на боевых самолетах запили Авиадартс.
  8. После создания юнита можешь задачу запустить раз в пару секунд расстояние до него проверять. Не большой пример: timer.scheduleFunction(function(_data) local _rescuer, _pilot = Unit.getByName(_data.rescuerName), Unit.getByName(_data.pilotName); if not (_rescuer and _rescuer:isExist()) then return timer.getTime() + 300;--если нет юнита спасателя, то снова проверить через 5 мин end if not (_pilot and _pilot:isExist()) then return nil; --если некого спасть, то снимаем задачу. end local _rescuer_point, _pilot_point = _rescuer:getPoint(), _pilot:getPoint(); local _distance = math.sqrt( (_rescuer_point.x - _pilot_point.x)^2 + (_rescuer_point.z - _pilot_point.z)^2); if _distance < 5000 then trigger.action.smoke(_pilot_point, trigger.smokeColor.Red); return nil; -- снять задачу end if _distance < 10000 then trigger.action.signalFlare(_pilot_point, trigger.flareColor.Red, 0); end return timer.getTime() + 2; -- повторить через 2 сек. end, { rescuerName = 'heli1', pilotName = 'a10c_pilot'}, timer.getTime() + 5); как-то так... - пишу не проверяя, так как DCS World под рукой нет.
  9. Попробуй так: local _object = event.initiator; local _point = _object:getPoint(); local _units = {}; table.insert(_units, { unitType = 'Infantry AK', unitName = 'dynamic_apc_1', playerCanDrive = false, point = { x = _point.x, y = _point.z } }); local _apc_group_desc = mission.utils.getGroupDescriptor('dynamic_apc', { x = _point.x, y = land.getHeight({ x = _point.x, y = _point.z }) + 0.1, z = _point.z }, _units); -------------------------- Хотя странно, насколько помню юнит созданный в воздухе сам оказывается на земле, а юнит созданный в воде тонет. Можешь добавить условие: if land.SurfaceType.WATER ~= land.getSurfaceType({ x = _point.x, y = _point.z }) then -- создавать юнита только в случае, если поверхность под ним не вода -- ... - дальше код создающий юнита end
  10. Ему трубка ПВД в затылок впилась :D
  11. Скрипт не видит таблицы mission - это говорит о том, что msf не подключен или подключен как-то не так или подключен позже выполняемого скрипта или кодировка выполняемого скрипта отличается от UTF-8 (без BOM)
  12. Вот этой: Vec3 function Object.getPoint(Object self) - объектом в данном случае будет юнит-инициатор события. Т.е. обработчик события получит event, а его свойство будет содержать инициатора event.initiator. ----------- Как работать с событиями описано тут: http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World/Part_1#world
  13. Georgia нужно большими буквами писать: country.id.GEORGIA Если что список всех идентификаторов стран приведен в руководстве по SSE: http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World/Part_1#country вот он: country.id = { RUSSIA, UKRAINE, USA, TURKEY, UK, FRANCE, GERMANY, CANADA, SPAIN, THE_NETHERLANDS, BELGIUM, NORWAY, DENMARK, ISRAEL, GEORGIA, INSURGENTS, ABKHAZIA, SOUTH_OSETIA, ITALY } ----------------- Если нужна автоматическая высадка при атаке группы или юнита, то её нужно вешать на событие onHit соответствующего объекта. Тут в двух словах не объяснить - будет время, сделаю небольшой пример.
  14. И ещё не большое объявление ещё: Я сейчас сильно занят новой версией MSF, поэтому практически не могу отвлекаться ни на какие другие задачи. Приоритет у меня сейчас такой: 1. Заканчиваю большую внутреннюю переработку MSF - на пользователей и разработчиков миссий это не повлияет, т.е. в миссиях уже существующих ничего менять не нужно будет. Просто делаю некоторое внутреннее окультуривание кода. 2. Из новых возможностей сейчас работаю над ПВО, то что когда начал и забросил - там будет много всего. Описание будет как будет готово. ----- Вот такие две задачи - на что-то другое у меня пока возможности отвлечься не будет, так что сорри за те вопросы, на которое не ответил в личке - пока не получается.
  15. Сложность - это издержки универсальности, механизм должен работать для разных условий, от этого много всяких настроек. Хотя то, что делается в ините - в этом не столько сложность, сколько рутинность. Реальная сложность может быть при полноценном использовании механизма обработки событий, который дает MSF - в обработчики событий можно много чего полезного помещать, но пока их широко никто не применяет. ---------------------- Когда-то была такая возможность, но она как-то не прижилась и я её зарубал... :) Можно. What tack what: Погрузка выполняется методом loadCargo(), который автоматически вызывается в погрузочной зоне, никто не мешает вызвать его самостоятельно вручную. 1. Допустим есть какой-то БТР и в редакторе он имеет имя btr_1 2. Делаем из него msf-объект: mission.model:addUnit('btr_1'); - в ините 3. Далее можно грузить груз: -- создаете описание вашего груза: local _my_cargo = { units = _template, -- перечень юнитов задается также, как шаблоны для зон погрузки unloadTime = 10, -- время на выгрузку в сек. groupName = 'my_new_group', -- имя вашей будущей группы из десанта cargoPlace = { point = { x = 0, y = 0, z = 0 }, radius = 1 }, -- просто скопируйте :) countryId = _country_id, -- ИД любой страны, например, country.id.USA conditions = { -- условия высадки altitudeLessThen = nil, speedLessThen = 10, command = 0 } }; mission.model.units['btr-1']:loadCargo(_my_cargo); ------------------- MSF разбит по "классам" - внутренним сущностям игрового мира msfUnit, msfGroup, msfCargoPlace - и т.д. + глобальная структура mission.model, которая хранит их всех вместе и меняется в соответствии с происходящими в игре процессами. Смотря по каким функциям. Есть же руководство: http://forums.eagle.ru/attachment.php?attachmentid=86369&d=1377020704 - оно хоть и не полное, но большинство "открытых" функций там есть.
  16. Вроде как для этого не нужен Export. События можно экспортировать добавив свой код в соответствующие callback-и в файлах events.lua и server.lua в папке Scripts\net.
  17. Так всё можно, мне совсем немного возможностей не хватает - мне надо функцию, которая вернет Vec3 направления обзора юнита (по направлению одного из орудий - пушки или пулемета), а ещё круче VolumePyramid - чтобы сразу пространство обзора получать, тогда без проблем можно наводить артуху по целям в области обзора. (если VolumePyramid отдать сложно (потому что ясно, что на разных юнитах разные сенсоры и их область видимости от кучи всего зависит), я согласен хотя бы направление только получать - область обзора сам смоделирую) Сейчас я могу получить пространственное положение юнита, но это актуально только для корпуса - по факту корпус может быть направлен в одну сторону, башня в другую, зенитный пулемет в третью и пойди знай куда смотрит юнит. (небольшое пояснение: я не беру во внимание функцию getDetectedTargets() - она очень полезная, но она отдает то что видит AI, а в данном случае мне надо целеуказание именно от живого игрока получить) P.S.: может конечно я тут не совсем в тему, т.к. с одной стороны хотелка затрагивает частично CA, с другой стороны возможности SSE, так что бог знает куда её лучше было написать. До этого писал её в английской тестерской ветке по SSE, но может там не удачно расписал - мне на английском тяжеловато мысли формулировать. Могу расписать на русском подробно, только думаю в этой ветке не совсем в тему будет...
  18. Это все легко бы решалось, если бы была реализована хотелка по Actions Menu (Меню действий) + хотелка по новой функции в SSE для получения Vec3 направления орудия или пулемета, которые я писал ранее - не знаю были они увидены или нет. Хотелки на мой взгляд легко реализуемы и возможностей дают новых много.
  19. К сожалению, большая часть из этого не реализуема: Юнит в DCS World это сам ЛА, если ЛА разбился, то оставшийся пилот это уже не юнит. Фигурка пилота - это почти тоже самое, что гражданский трафик, т.е. для пилота уже нет понятия коалиции. Можно, но не в момент приземления, а в момент катапультирования - можно создать любой сигнал, на любой частоте и любой мощности. Событие S_EVENT_PILOT_DEAD (смерть пилота) не сработает, если ЛА уже разбился. Это можно сделать, но в привязке к точке катапультирования, а не точке приземления, а они в свою очередь могут значительно отличаться, в зависимости от того, куда снесло пилота. Т.к. пилот не есть юнит, то механизма погрузки для него не сделать, но вроде как-то можно приземлится так, чтобы фигурка-пилота "застряла" в вертушке и тогда можно будет улететь вместе с ним.
  20. Поскольку я на ястребах не летал уже давненько, о ракетах воздух-воздух в игре я сейчас помню чуть больше чем ничего. У меня есть пара вопросов знатокам: 1. Если брать в совокупности все ракеты воздух-воздух средней дальности в игре, то какая в среднем получается дальность поражения в заднюю полусферу цели типа А-10 или Су-25 с вероятностью 0.5 и более. 2. Тот же самый вопрос, только в качестве цели AWACS, A-50 или B-52 - вообщем что-то большое и не очень быстрое.
  21. Обновленный скрипт capture_heliports. Учитывается переход площадок нейтральной коалиции. Полностью не тестировал - это долго. (убедился только, что ничего не падает). capture_heliports.lua
  22. 1. Последний раз такое было при переходе с версии 1.2.1 на 1.2.2 (или когда там добавлялись склады, я не помню точно), ещё были проблемы, когда галочку добавили для активации с задержкой - других случаев не помню и было это уже давным давно. 2. Формат миссий открытый и если что-то и изменилось это всегда можно проверить и внести соответствующие изменения. ------------ Я бы согласился только с тем, что changelog по ME и SSE разработчикам стоило бы делать подробней.
  23. Ничего подобного в CoH и CoH 2 нет. -------------- Что, интересно, должно меняться? Если в какой-то миссии условия победы беспощадно тупы, то менять что-то должен тот кто эту миссию создавал. Задать условие на победу по % от общего здоровья всех групп коалиции можно в редакторе обычными триггерами (вроде как ещё со времен ГС2). ----- Так кто мешает создавать миссии не для выноса мозга, а на 100% времени интересного геймплея? Для сравнение посмотрите на комюнити Aram 2 - они для себя создают миссии, которые на серверах крутятся годами, но интерес к ним нисколько не снижается. Что вам мешает в DCS World создавать тоже самое? Я уж молчу, что создание миссий для Arma 2 это более сложный процесс, а некоторые средства DCS World по созданию миссий превосходят армовские.
×
×
  • Create New...