Jump to content

DCS: World Scripting Engine


Recommended Posts

Бандит, или кто сведущий, есть небошая проблемка - вся пехота высаживается мордой лица только на север (или курсом 000) - как можно им задать направление смотреть туда, куда их носитель (вертолет или наземка) смотрит в момент высадки?

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

  • Replies 169
  • Created
  • Last Reply

Top Posters In This Topic

Бандит, или кто сведущий, есть небошая проблемка - вся пехота высаживается мордой лица только на север (или курсом 000) - как можно им задать направление смотреть туда, куда их носитель (вертолет или наземка) смотрит в момент высадки?

Описание шаблонов групп десанта происходит в файле init.lua и подгружается в самом начале миссии, в процессе миссии происходит "рождение" группы по ранее описанному шаблону в котором нет направления.

Теоретически можно получить направление транспорта в момент высадки, только вот чему его присваивать?

граждане отдыхающие...если кто знает что это за функция self:getDCSWorldUnit() ?

Получение под управление юнита из движка игры в SSE

Link to comment
Share on other sites

  • 2 weeks later...
Получение под управление юнита из движка игры в SSE

 

Немного поправлю, а то как-то двухсмысленно звучит.

 

getDCSWorldUnit() - это метод отбрасывающий оболочку MSF с объектов класса Unit и возвращающий соответствующий объект SSE.

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

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

Онлайн-MG:joystick:

 

"Страшнее Шилки зверя нет".

"ПИСДРУНС СС ПП".

"Носи ППК с молоду-любить будешь до старости".

"СА-Танки решают все!"

"- А мы, старшина, ни за первую и не за вторую… Мы – за третью. За эту… За как её?.. За Родину!"

 

 

__|77|________:::::: =}-

\~~~~~~~~~/~~~~~~~ NAVAL AVIATION FAN ~~~~~~~

Link to comment
Share on other sites

to Bandit....

объясни пожалуйста логику построения системы ПВО в DCS..я вот не совсем понимаю..все элементы должны находится в одно группе?...что такое communication_unit в addAirDefenceUnit ?...вообщем взял я твой пример , пытался его переделать под себя и в ответ "нету связи с такой группой"..короче в air_defence_event_handler.lua

 

if not sender:isOnline() then

do

local _radio_message, _text_message = {}, sender:getDisplayName() .. ' не выходит на связь'; вот на этом условие он не проходит...подсоби если не сложно...я всю группу EWR, COMM.POST, COMMUNICATION.POST и CONTROLLED_UNIT поместил в одну группу...


Edited by Timujin
Link to comment
Share on other sites

все элементы должны находится в одно группе?

 

Нет, наоборот лучше раскидывать по разным группам (по группам крайне важно раскидывать юниты с ролями EWR, LN, AMBUSH, USER_COTROLLED_UNIT, OBSERVATION_POST) - так как скрипт управляет включением \ выключением AI, а у наземных групп он общий.

(Примечание: Я пишу именно о группах DCS World, а не о группировках ПВО).

 

что такое communication_unit

 

Это юнит, который отвечает за связь с остальной группировкой (внутри группировки).

 

По моему в руководстве я делал описание (см. 38 страницу руководства - http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825).

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

Это юнит, который отвечает за связь с остальной группировкой (внутри группировки).

 

 

А в чём эта связь выражается?...этот юнит должен просто существовать, или он должен быть реальным игроком...просто я создал 4 группы для каждой из ролей (EWR, COMM.POST, COMMUNACATION, CONTROLLED_UNIT)..внутри каждой группы свой COMM.POST, COMMUNACATION...в описание группировки , в раздел communication_unit, я указал соответсвующий юнит внутри каждой группы DCS.... и мне упорно сообщается что с такой группой нету связи..

Link to comment
Share on other sites

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

 

1. Он должен просто существовать и должен быть живым.

 

2. Юнит с ролью COMMUNACATION_POST и communication_unit, который передается в addAirDefenceUnit() - это разные объекты.

 

Юнит с ролью COMMUNACATION_POST ((это объект класса msfAirDefenceUnit)) - это юнит, который обеспечивает связь всей группировки ПВО целиком, с другими группировками. Если его уничтожить без связи будет куковать вся группировка.

 

А вот communication_unit (это объект класса msfUnit) - это юнит, который обеспечивает связь одного конкретного юнита airDefence внутри группировки. Если его уничтожить без связи останется один конкретный юнит группировки.

 

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

----

и мне упорно сообщается что с такой группой нету связи..

Это значит, что юнит с ролью COMMUNACATION_POST инициализирован не правильно или он вообще не был создан, или был уничтожен, или был поврежден.

 

Убедись, что объекты которые ты используешь в скрипте, соответствуют реальным объектам созданным в редакторе (если конечно, ты не создаешь их динамически).

----

P.S.: Можешь просто скинуть свою миссию, может быть у меня будет время посмотреть, что там не так.

 

Ну или скинь сюда кусок скрипта, создающего группировку ПВО, может я сразу увижу в чем ошибка.


Edited by BAntDit

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

Ну или скинь сюда кусок скрипта, создающего группировку ПВО, может я сразу увижу в чем ошибка.

 

mission.model:addAirDefenceGroupment('rgt643', '643-й зенитно-ракетный полк', true, false);

 

-- ДРЛО

mission.model.airDefenceGroupments.rgt643:addAirDefenceUnit(mission.model.units.rgt643_ewr,msfAirDefenceUnitRole.EWR,0, 0,

mission.model.units.rgt643_ewr_comm, 'ДРЛО 643ого ЗРП', 12, false);

 

-- Коммнандный пункт

mission.model.airDefenceGroupments.rgt643:addAirDefenceUnit(mission.model.units.rgt643_hq_cp, msfAirDefenceUnitRole.COMMAND_POST,0, 0,

mission.model.units.rgt643_hq_comm,'КП 643ого ЗРП' , 0, false);

 

-- юнит,обеспечивающий связь с внешними подразделениями:

mission.model.airDefenceGroupments.rgt643:addAirDefenceUnit(mission.model.units.rgt643_comm,msfAirDefenceUnitRole.COMMUNICATION_POST, 0, 0,

mission.model.units.rgt643_comm,'Рота связи 643ого ЗРП' , 0, false);

 

mission.model.airDefenceGroupments.rgt643:addAirDefenceUnit(mission.model.units.rgt643_ln_1,msfAirDefenceUnitRole.USER_CONTROLLED_UNIT, 11500, 12500,

mission.model.units.rgt643_ln_1, 'Отдельный расчет ЗРК Тор 1-го зрдн (игрок)', 12, false);

 

mission.model.groups.rgt643_ln:setRadioCommunicationsWithAirDefence(true);

Link to comment
Share on other sites

Тут ошибок вроде не вижу.

 

Вот этот (rgt643_comm) юнит в msf добавлен и реально есть в миссии?

----

Лучше наверно мне миссию целиком скинуть.

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

Все заработало..надо было в onTargetDetectedEventHandler указать юнита с ролью COMMAND.POST (хотя я так до сих пор не понял почему имеено с этой ролью ,а не с ролью COMMUNICATION_UNIT)....спасибо за инфу...и помощь..

 

есть так сказать встречный вопрос...если в группе ПВО нет юнитов с ролью CONTROLLED_UNIT, игроки не смогут управлять пуском ракет ..они смогут получать только инфу о цели..если в группе есть роль CONTROLLED_UNIT..то без участия игрока, этот юнит фактически никак не управляем...получается либо только ИИ..либо только люди...можно ли скриптами сделать управление юнитами с ролью LN..к примеру сидит какой-нибудь чел в КП и в чате, например, пишит

#rgt653 #unit_1 #Пуск

Link to comment
Share on other sites

есть так сказать встречный вопрос...если в группе ПВО нет юнитов с ролью CONTROLLED_UNIT, игроки не смогут управлять пуском ракет ..они смогут получать только инфу о цели..если в группе есть роль CONTROLLED_UNIT..то без участия игрока, этот юнит фактически никак не управляем...получается либо только ИИ..либо только люди...

 

В группировку ПВО можно включить одновременно юнитов управляемых ИИ (LN или AMBUSH) и юнитов для управления игроками (CONTROLLED_UNIT) и они будут хорошо дополнять друг друга, но назначить на юнит одновременно две роли LN и CONTROLLED_UNIT нельзя они не совместимы.

 

По идее было бы умно сделать автоматическое переключение ролей: включать роль

CONTROLLED_UNIT, если игрок занял юнит ЗРК и включать роль LN, если игрок покинул юнит, но сейчас движок не позволяет этого реализовать - в событийной модели движка

сейчас отсутствуют события занятия и покидания наземного юнита.

 

можно ли скриптами сделать управление юнитами с ролью LN..к примеру сидит какой-нибудь чел в КП и в чате, например, пишит

#rgt653 #unit_1 #Пуск

 

Да, теоретически можно - вроде как все для этого есть, но писать в чате команды не удобно, лазить в radio menu за каждой командой тоже не удобно. Я когда-то писал хотелку по Action Menu как в Arma, но эта хотелка сгинула в массе других :)

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

кто подскажет, msfUnit:hasTransport() в каком файле и какую запись проверяет, а то в случае с Ми-8 работает, а с Ил-76 нет...хотя у обоих стоит задача "Транспорт"?

Link to comment
Share on other sites

кто подскажет, msfUnit:hasTransport() в каком файле и какую запись проверяет, а то в случае с Ми-8 работает, а с Ил-76 нет...хотя у обоих стоит задача "Транспорт"?

 

Наверно, все таки ты имеешь ввиду функцию msfUnit:hasTransportTask() - эта функция проверяет свойство юнитов isTransport.

 

Свойство isTransport для юнитов устанавливается в True автоматически, если в редакторе миссии им выставлена задача транспорт, но автоматическое выставление выполняется только для вертолетов (поскольку на момент написания этой функции других управляемых транспортников не было,а для наземки задачи вообще не указываются).

 

Для решения проблемы ты можешь выставить свойство вручную в init-скрипте для тех юнитов, которые планируешь использовать как транспорт:

 

mission.model.units.имя_твоего_юнита:setTransportTask(true);


Edited by BAntDit

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

  • 2 weeks later...

Bandit.. Объясни пожалуйста, как работает функция world.searchObjects, потомучто чето она как то странно работает..если в id = world.VolumeType.SPHERE задать радиус, при котором объект поиска уже находится в зоне, то ObjectSearchHandler вызывается, а если задать радиус ,при котором, объект еще не в зоне поиска, то ObjectSearchHandler не вызывается, хотя группа дошла аж до самой вышки ...прилагаю пример

watch_tower.miz

Link to comment
Share on other sites

  • 3 weeks later...
как работает функция world.searchObjects

 

Функция находит все объекты, которые в момент вызова попадают в объем поиска.

ObjectSearchHandler вызывается по очереди для найденных объектов, до тех пор пока не будет вызвана для каждого найденного объекта или до тех пор пока не вернет false.

 

а если задать радиус ,при котором, объект еще не в зоне поиска, то ObjectSearchHandler не вызывается

 

Все правильно. Поиск происходит в момент вызова world.searchObjects, если в момент вызова объект не попадает в объем поиска, то и ObjectSearchHandler для него вызван не будет.

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

  • 4 months later...

Я понимаю, что это форум не по обучению lua, но если это не сильно напряжёт, объясните зачем часто в контексте DCS в скриптах используются переменные с названием начинающимся с нижнего подчёркивания. Всё что я нарыл, это то, что таким образом задаётся глобальная переменная (_G в документации по lua, или это не то?), но встречал код содержащий например "local _a". Как это работает и зачем?


Edited by eekz

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

Burning Skies

=Burning Skies= @ Facebook

Link to comment
Share on other sites

но встречал код содержащий например "local _a". Как это работает и зачем?

 

Никак - это ни на что не влияет. Это просто такой порядок нотации, чтобы глядя на переменную ты сразу понимал, что она локальная.

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

Спасибо.

А можно ли при помощи timer.scheduleFunction назначить функцию с двумя и более аргументами?

Например если у меня функция myfunc(a) то я её назчаю timer.scheduleFunction(myfunc, a, time), а если у меня myfunc(a, b) и я её назначаю timer.scheduleFunction(myfunc, a, b, time), то не работает.

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

Burning Skies

=Burning Skies= @ Facebook

Link to comment
Share on other sites

Спасибо.

А можно ли при помощи timer.scheduleFunction назначить функцию с двумя и более аргументами?

Например если у меня функция myfunc(a) то я её назчаю timer.scheduleFunction(myfunc, a, time), а если у меня myfunc(a, b) и я её назначаю timer.scheduleFunction(myfunc, a, b, time), то не работает.

 

В качестве аргумента можно использовать таблицу, поля которой будут содержать все необходимые аргументы.

 

parameters = { param1 = a, param2 = b};

function myfunc(parameters)
     local a_, b_ = parameters.param1, parameters.param2;

      //... do something
end;

timer.scheduleFunction(myfunc, parameters, time);

как-то так...


Edited by BAntDit

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Link to comment
Share on other sites

Как получить никнейм игрока скриптами SSE?

Немного разобрался как получать нужные параметры юнита по его имени в группе, но хочу получать параметры объекта с заранее неизвестным ником в сетевой миссии.

Возможно ли это?

Link to comment
Share on other sites

function Unit.getPlayerName(Unit self)

Например эту функцию можно запустить в eventHandler при событии birth или take off. Таким образом можно получать ники тех кто появился на полосе или взлетел.


Edited by eekz

Куплю 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

  • Recently Browsing   0 members

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