Jump to content

Вопрос про Lua, сокеты и проч.


crumstler

Recommended Posts

Всем привет,

 

Есть одна задумка на тему подключения стороннего железа (VRInsight) к DCS, и в связи с этим есть ряд вопросов.

 

Если не вдаваться в подробности, то задача такая: допустим, есть Lua скрипт запущенный отдельным процессом параллельно с DCS - надо наладить обмен данными между ними. От DCS нужно получить текущий статус основных систем и положение самолета в пространстве, а обратно в DCS иметь возможность отправлять стандартные команды типа выпуска шасси, включения/выключения автопилота и тп.

 

Старую документацию по этой теме нашел (https://www.digitalcombatsimulator.com/ru/dev_journal/lua-export/#112), но судя по всему сейчас структура скриптов несколько изменилась и шаг за шагом повторить инструкцию не получится.

 

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

=303=Crum

Link to comment
Share on other sites

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

 

p. s.

Насколько понимаю, прием данных от стороннего софта делается через тот же export.lua и тот же открытый сокет, только в обратном направлении (читаем данные из сокета)... надо поэкспериментировать.


Edited by crumstler

=303=Crum

Link to comment
Share on other sites

  • ED Team
Ага, уже там копаюсь, спасибо. По экспорту логика в общем понятна. А как обратную передачу данных организовать? Как мне из своего скрипта отправить команду в DCS на выпуск шасси и тп?

 

Все есть по этой ссылке:

Input:	
LoSetCommand(command, value) -- (args - 2, results - 0)	
-1.0 <= value <= 1.0

 

Там же список команд. Такой же текст в комментариях в файле Export.lua, который находится в папке симулятора.

"You become responsible, forever, for what you have tamed.” ― Antoine de Saint-Exupéry, The Little Prince.
Link to comment
Share on other sites

Так-с, с обменом данными разобрался - все работает.

 

Теперь есть другой вопрос: правильно ли я понимаю, что скрипт экспорта выполняется строго синхронно с основным движком DCS? То есть, например, если я в функцию LuaExportBeforeNextFrame вставлю код, который выполняется 1 секунду, то и FPS в симуляторе упадет до одного кадра в секунду?

=303=Crum

Link to comment
Share on other sites

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

для жёсткого ограничения по времени лучше использовать

function LuaExportActivityNextEvent(t)
 local tNext = math.floor(t)

--тут чтото

 tNext = tNext + 1 //пытается сработать каждую секунду
 return tNext
end

Link to comment
Share on other sites

Да-да, уже выяснил опытным путем - время выполнения скрипта прибавляется ко времени расчета текущего кадра, так что нагружать скрипт нельзя - упадет фпс.

 

Первый этап работы уже сделан. Отдельным процессом запускается скрипт, который работает непосредственно с железякой, и через сокет налажен обмен данными со скриптом экспорта/импорта данных в DCS.

 

Следующий вопрос такой: есть типовые команды, которые перечислены в самом скрипте экспорта (те что унаследованы еще с ЛокОна) - там номера команд от 0 до 430.

 

А где взять список команд и их номеров по модулям - Акула, А10 и прочие?

 

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

=303=Crum

Link to comment
Share on other sites

Тут во вложении список команд есть, но я не разбирался как ими пользоваться - http://forums.eagle.ru/showpost.php?p=567615&postcount=14

Тебе наверно нужно копать это http://forums.eagle.ru/showpost.php?p=567629&postcount=15

Но как тумблера через экспорт протаскивать я тоже не разбирался.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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