Jump to content

lua-скрипты


Recommended Posts

Первое, что хотелось бы отметить - Поиск по слову "LUA" на форуме возвращает 0 результатов.

 

LUA (ru.wiki) - скриптовый язык, используемый в DCS (как и в ЛО) для:

- описания практически всех настроек

- взаимодейтсвия симулятора с внешним миром

- описание многих параметров симуляции

- много еще чего (в треках, миссия и пр.)

 

 

Ссылки по теме:

http://www.lua.org/ - официальный сайт

http://www.lua.org/pil/ - Programming in LUA, документация

http://lua-users.org/ - не официальный сайт

http://www.lua.ru/ - русский сайт по LUA

Статья на русской части википедии (крайне рекомендуется!)

"Введение в LUA" на GameDev.ru

"Создание встраиваемых сценариев на языке Lua" на DeveloperWorld IBM

 

Примеры проектов на LUA для LO\DCS

Virtual Panel от Mnemonic

Controlling Lockon from another application using lua


Edited by FreemanRU
  • Like 2

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

  • Replies 308
  • Created
  • Last Reply

Top Posters In This Topic

Сразу вопросы:

1. Где можно взять соотвествие между английским именование команд и русским (секция LoSetCommand в Export.lua)?

2. Как можно получить значение индикатора автомата отстрела ловушек?

3. Как можно получить состояние кнопок пульта выбора режимов ПВР (АДВ, ППС, ВЦ, НПЦ)?

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

Описание параметров weapon system файлов базы данных вооружения:

WS - weapon system, описывает подвижную платформу вооружения, редко - неподвижную, как на С-300.

LN - launcher, заведует прицеливанием конкретного типа вооружения.

PL - pylons, в процессе разработки трансформировалось в параметры хранилища боеприпасов

BR - barrel (ствол), визуальная составляющая места, с которого стартует боеприпас.

Далее идет описание того, что мне удалось выяснить. Будет добавляться по мере поступления информации.

Структура BR имеет две версии "старую", без коннекторов и новую, с коннекторами.

Старая описывает место выстрела боеприпаса координатами относительно центра модели (??не уверен, что именно центра, но похоже??):

GT.WS[ws].LN[1].BR[1] = {pos = {x, y, z}, drawArgument = D }

где D - номер "аргумента", "зашитый" в 3D-модель

Н-р:

GT.WS[ws].LN[1].BR = {}

GT.WS[ws].LN[1].BR[1] = {pos = {10.05, 0.216,-1.045}, drawArgument = 4 }

GT.WS[ws].LN[1].BR[2] = {pos = {10.05, 1.204,-0.614}, drawArgument = 5 }

GT.WS[ws].LN[1].BR[3] = {pos = {10.05, 1.204, 0.614}, drawArgument = 6 }

GT.WS[ws].LN[1].BR[4] = {pos = {10.05, 0.216, 1.045}, drawArgument = 7 }

 

"новая" описывает структуру с коннекторами. Коннекторы "зашиты" в код модели, и не могуть быть изменены через скрипты. Есть подозрение, что возможно коннекторы - название каких-то элементов в 3D-модели.

Н-р:

GT.WS[ws].LN[1].BR = { { connector_name = 'POINT_OSA_1_1' }, { connector_name = 'POINT_OSA_1_2' } }

 

В скрипте необходимо использовать либо "новую" структуру с коннекторами (если модель поддерживает коннекторы), либо "старую", с pos.


Edited by FreemanRU

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

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

 

pos = {10.05, 0.216,-1.045} это прописывается для моделей старого формата, где нет нужных коннекторов. если есть .connector_name = '...', то pos={...} не нужен


Edited by Dmut

"There are five dangerous faults which may affect a general: recklessness, which leads to destruction; cowardice, which leads to capture; a hasty temper, which can be provoked by insults; a delicacy of honor which is sensitive to shame; over-solicitude for his men, which exposes him to worry and trouble." Sun Tzu

[sigpic]http://forums.eagle.ru/signaturepics/sigpic2354_5.gif[/sigpic]

Link to comment
Share on other sites

Во вложении - файл kilo.lua, в которм даны некоторые комментарии к системе воорружения, используемой в скриптах. Описание не полное, любые комментраии и дополнения приветствуются.

 

Смысл скрипта - на невооруженное по умолчанию судно (подлодка лкасса Кило) устанавливаем ракеты калсса земля-воздух, а именно ТОР.

 

Комментарий по поводу параметров

.ammunition_reserve = 
PL[X].ammo_capacity = 
PL[X].reload_time = 
PL[X].shot_delay = 

http://forums.eagle.ru/showpost.php?p=567565&postcount=545

http://forums.eagle.ru/showpost.php?p=567577&postcount=546

kilo.zip


Edited by FreemanRU
  • Like 1

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

Подставил kilo.lua, но лодка отказывается пускать ракеты

 

 

CPU: Intel Core i9 11900K 5.3 gHz RAM: 128 gb DDR4 Corsair Vengeance 3600 mHz Video: Gigabyte GeForce RTX3070 OC 8 gb 256bit

 

 

 

Link to comment
Share on other sites

Молодцы, хороший вопрос подняли, я вот как раз задумывался анимировать на "Боре" пусковую ЗРК или нет. По умолчанию (сужу по Локону) она нерабочая была.

Link to comment
Share on other sites

Еще одна маленькая модификация.

Если кто не в курсе - в игре есть масса команд, которые можно передавать в сим, но которые не выведены в настройки управления. В настройках доступно 499 команд, тогда как их всего около 900.

Самым ярким примером таких команд являются пары команда типа "включить/выключить". Н-р команда "выпустить шасси" и "убрать шасси". В игре это выведено на одну команду "перевести шасси в противоположное положение".

Если у вас есть панели или тумблеры, и вы хотите сделать выпуск шасси и уборку на разные кнопки, по умолчанию это не возможно.

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

Скрипты устройств находятся в папке ..\Config\Input\Aircrafts\ka-50\ в подпаках keyboard, joystick и mouse соотвественно.

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

Правило именование файла джойстиков таково:

Имя_джойстиска_в_системе {GUID_джойстика}.lua

Н-р у меня в системе 2 джойстика - PPJoy и Saitek X52, соотвественно и 2 файла:

PPJoy Virtual joystick 1 {5392F1B0-9D4B-11dd-8001-444553540000}.lua

Saitek X52 Flight Control System {F7ACB6F0-862B-11dd-8001-444553540000}.lua

 

Теперь о содержимом. Внутри скриптов содержится переменная options, в которую входит 3 массива - в одном ("keyCommands") содержатся все кнопки, в другом ("forceFeedback") содержатся настройки отдачи, в третьем ("axisCommands") - настройки осей.

В данном посте будут рассмотрены только настройки массива "keyCommands".

Общее описание элемента массива "keyCommands":

 
[1] = 
{
           -- "combo" - описание клавиши, на которую настроена данная команда. 
           ["combos"] = 
           {
               [1] = 
               {
                   -- собственно клавиша, в данном примере - H на кливиатуре
                   ["key"] = "H",
                   -- модификаторы, их может быть несколько
                   ["reformers"] = 
                   {
                       [1] = "RAlt",
                       [2] = "RShift",
                   }, -- end of ["reformers"]
               }, -- end of [1]
           }, -- end of ["combos"]
           ["name"] = "Command Name", -- Название команды
           ["category"] = "Group", -- группу настроек
           -- Далее идет описание ["действие"] = код команды
          -- код команды зашиты в сам симулятор
          ["down"] = 1, -- нажатие кнопки
          ["up"] = 2, -- отпускание кнопки
          ["pressed"] = 3, -- команда повторяется, пока кнопка нажата
}, -- end of [1]

 

Первый вопрос - где смотреть коды команд. Ответ прост - в самом файле кнопок, который мы сейчас редактируем (если мы хотим что-либо поменять) и в файле Export.lua, в комментариях к функции LoSetCommand

 

Вернемся к нашей задаче. Для примера мы хотим на комбинация RWin+G повесить команду "убрать шасси", на комбинацию RWin+RShift+G - "выпустить шасси".

Находим команду "Шасси, кран" в скрипте клавиатуры, её номер - 139, выглядет она вот так:

[139] = 
       {
           ["combos"] = 
           {
               [1] = 
               {
                   ["key"] = "G",
               }, -- end of [1]
           }, -- end of ["combos"]
           ["name"] = "Gear lever",
           ["category"] = "Ins Forward panel and gauges",
           ["down"] = 68,
       }, -- end of [139]

Всего команд - 499, соотвественно нам надо создать 500 и 501, и добавить их в конец массива "keyCommands" вот таким образом:

 
[500] = 
       {
           ["combos"] = 
           {
               [1] = 
               {
                   ["key"] = "G",
                   ["reformers"] = 
                   {
                       [1] = "RWin",
                   }, -- end of ["reformers"]
               }, -- end of [1]
           }, -- end of ["combos"]
           ["name"] = "Test Gear Up",
           ["category"] = "Ins Forward panel and gauges",
           ["down"] = 430,
       }, -- end of [500]
 [501] = 
       {
           ["combos"] = 
           {
               [1] = 
               {
                   ["key"] = "G",
                   ["reformers"] = 
                   {
                       [1] = "RWin",
                       [2] = "RShift",
                   }, -- end of ["reformers"]
               }, -- end of [1]
           }, -- end of ["combos"]
           ["name"] = "Test Gear Down",
           ["category"] = "Ins Forward panel and gauges",
           ["down"] = 431,
       }, -- end of [501]

Вот и всё. Причем мы можем даже не вставлять секцию ["combos"], а настроить кнопки непосредственно из интерфейса игры - новые команды будут там достпуны.

Вот так это выглядет в интерфейсе игры после модификации:

attachment.php?attachmentid=21328&stc=1&d=1226436042

 

Точно также нужно модифицировать файлы скриптов джойстиков.

Keys.png.38693206aeaa699a31557d1e237f5dc9.png


Edited by FreemanRU
  • Like 2

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

Настройки "быстрых взглядов"

..\Config\View\SnapViews.lua, SnapViewsDefault.lua, View.lua

Дефолтные быстрые взгляды заданы в файле SnapViewsDefault.lua, пользовательские определяются в SnapViews.lua. А в файле View.lua есть строки (значения тут по умолчанию):

 

DisableSnapViewsSaving = false

UseDefaultSnapViews = false

 

в которых определяется доступность cохранения пользовательских быстрых взглядов и использование только дефолтных.

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

  • ED Team
Разработчики, ну пооожаааааааалуйста, дайте полный список команд для LoSetCommand :cry:

 

Смысловое описание команд смотри например в Default.lua для клавиатуры.

Номера команд описаны в приаттаченных файлах.

 

iCommand.h - кнопочные команды.

Actions.h - непрерывные оси.

LoSetCommand.rar

Единственный урок, который можно извлечь из истории, состоит в том, что люди не извлекают из истории никаких уроков. (С) Джордж Бернард Шоу

Link to comment
Share on other sites

  • ED Team

Итак приступим к постановке переключателя в конкретное положение посредством программирования.

Для этого нам понадобится Lua.

 

характерный пример такой работы существует в акуле в виде скрипта автозапуска.

 

кусок из Scripts/Aircrafts/Ka-50/Cockpit/device_init.lua

creators[devices.MACROS]    =  {"avLuaDevice",
                               LockOn_Options.script_path.."Macro_handler.lua",
                               {},
                               LockOn_Options.script_path.."Macro_commands.lua",
                               }

 

что мы здесь делаем создаем полностью Lua устройство devices.MACROS

которое выполнит файл LockOn_Options.script_path.."Macro_handler.lua"

 

внутри файла определена функция

function SetCommand(command,value)
   if track_is_reading() then
       return
   end
if command == Keys.iCommandEnginesStart then	
	if LockOn_Options.flight.easy_radar then 
	    check_routine(start_order,start_sequence_full)
	else
	    check_routine(start_order,start_sequence_heavy)
	end
elseif command == Keys.iCommandEnginesStop then
       kill_routine(start_order)
       check_routine(stop_order,stop_sequence_full)
else
   end
end

обрабатывающая комманды iCommandEnginesStart

iCommandEnginesStop

 

регистрация этих комманд на устройство выполнена в файле

LockOn_Options.script_path.."Macro_commands.lua"

 

в результате запускается деятельность по очереди щелкающая тумблерами.

а теперь самое интересное щелканье тумблерами :

 

dofile("Scripts/Aircrafts/Ka-50/Cockpit/devices.lua")
dofile("Scripts/Aircrafts/Ka-50/Cockpit/command_defs.lua")

local abris = GetDevice(devices.ABRIS)

if abris then 
  abris:performClickableAction(device_commands.Button_9,1.0)--power ON
  abris:performClickableAction(device_commands.Button_9,0)  --power OFF
end

 

все тумблера описаны в Scripts/Aircrafts/Ka-50/Cockpit/clickabledata.lua

оттуда можно взять и номер комманды и значение :

для тумблера позиция будет расчитываться как arg_lim[0] + n * arg_value

где n - номер позиции тумблера

 

P.S. GetDevice также доступна из Export.lua

  • Like 1
sigpic2354_5.gif
Link to comment
Share on other sites

ОГРОМНОЕ спасибо :) Будет над чем поработать :)

 

ЗЫ А найти скрипт автозапуска я не догадался :( Тормоз, однако..

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

FreemanRU а напишите пожалуйста, что где нужно прописать, чтобы фигура пилота была в кабине по-умолчанию.( стандартно её по-умолчанию нет)

Link to comment
Share on other sites

FreemanRU а напишите пожалуйста, что где нужно прописать, чтобы фигура пилота была в кабине по-умолчанию.( стандартно её по-умолчанию нет)

Сейчас негде проверить точно, но скорее всего вот так:

Скрипт - ..\Scripts\Aircrafts\Ka-50\Cockpit\mainpanel_init.lua

Строка:

 
draw_pilot      = false

поменять на

 
draw_pilot      = true

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

При попытке сделать полезный осветительный НАР из ненужного маркерного, прилепив к нему скотчем лампочку от САБа, игра выпадает в осадок в момент, когда должна зажечься лампочка (в крэш-файле упомянут Effects.dll).

 

Это я чего-то недоклеил или просто пытаюсь сделать невозможное?

Коричневые очки никогда не поранят мозг. Они небьющиеся.

Brown-coloured spectacles will never harm a brain. They are unbreakable. (с) Me

сфсвсг

I'm the future of the Russian government.

According to Scott Lofgren,

Bentley Systems global director.

Link to comment
Share on other sites

Сейчас негде проверить точно, но скорее всего вот так:

Скрипт - ..\Scripts\Aircrafts\Ka-50\Cockpit\mainpanel_init.lua

Строка:

 
draw_pilot      = false

поменять на

 
draw_pilot      = true

Спасибо попробуем))

Link to comment
Share on other sites

Вид только ИЛС я хотел использовать, при строительстве кокпита, хотел этот вид с помощью MATROXa http://forums.eagle.ru/showpost.php?p=548969&postcount=26 вынести на три монитора,былобы похоже на кабину....., а скажи никак нельзя в будущем cделать, допустим, вид как он есть сейчас и вид только ИЛС, как он выглядит в ЛО. Допустим,построил я кабину ,Шквал и АБРИС у меня расположены там где и должны быть,и на виде из кабины,я не хочу штобы там изображалась кабина, значит, мне нужен вид только ИЛС, и в данном случае получится, что шквал и АБРИС у меня ещё раз показываются, да к тому же там где вообще они не нужны.....

 

Может быть разработчики подумают об этом, и в патче реализуют, я думаю, что это нужно, ведь нверняка не сложно организовать вид ТОЛЬКО ИЛС, без всего остального, а то кабину с большим обзором не построить.


Edited by Chizh

Intel® Core™ i7-7700k 4.5 GHz/ AsRock Z270 Taichi/ SSD Samsung 970 EVO 500 Gb/NVIDIA® GeForce® RTX 2080TI Gaming X Trio/ DDR4 32 Gb 3000 MHz/ 

Hotas Warthog/ Rudder Pedals RX Viper V2 Slaw Device / VR HTC VIVE PRO

 

Link to comment
Share on other sites

  • ED Team

В файлах

 

Scripts\Aircrafts\Ka-50\Cockpit\ABRIS\ABRIS_init.lua

Scripts\Aircrafts\Ka-50\Cockpit\SHKVAL\SHKVAL_init.lua

найти строчку вида

purposes  = {render_purpose.GENERAL,render_purpose.HUD_ONLY_VIEW}

и заменить на

 

purposes  = {render_purpose.GENERAL}

 

если предполагается в дальнейшем работа с несколькими мониторами

то найти в этих же файлах дополнительно

  purposes 	 = {render_purpose.GENERAL,
				render_purpose.HUD_ONLY_VIEW,
				render_purpose.SCREENSPACE_OUTSIDE_COCKPIT,
				render_purpose.SCREENSPACE_INSIDE_COCKPIT} -- set purposes to draw it always 

 

и убить там render_purpose.HUD_ONLY_VIEW вот так

 

  purposes 	 = {render_purpose.GENERAL,
                             render_purpose.SCREENSPACE_OUTSIDE_COCKPIT,
	      render_purpose.SCREENSPACE_INSIDE_COCKPIT} -- set purposes to draw it always 

 

 

 

 

в файле

Scripts\Aircrafts\Ka-50\Cockpit\device_init.lua

закоментировать строчку или удалить полсностью строчку

indicators[#indicators + 1] = {"ccIndicator",LockOn_Options.script_path.."Caution_lights_indicator/CautionLights_panel.lua",nil,{{},{0,0,1,0,0,0,1,1}}}

sigpic2354_5.gif
Link to comment
Share on other sites

Пардон, немножко повторюсь:

При попытке сделать полезный осветительный НАР из ненужного маркерного, прилепив к нему скотчем лампочку от САБа, игра выпадает в осадок в момент, когда должна зажечься лампочка (в крэш-файле упомянут Effects.dll).

 

Это я чего-то недоклеил или просто пытаюсь сделать невозможное?

Коричневые очки никогда не поранят мозг. Они небьющиеся.

Brown-coloured spectacles will never harm a brain. They are unbreakable. (с) Me

сфсвсг

I'm the future of the Russian government.

According to Scott Lofgren,

Bentley Systems global director.

Link to comment
Share on other sites

export.lua: LoGetIndicatedAirSpeed() возвращает nil вместо скорости

 

День добрый.

 

Очень странно ведёт себя функция LoGetIndicatedAirSpeed(), по идее должна возвращать число, а возвращает nil

 

Слегка модифицированный пример, внутри функции LuaExportAfterNextFrame():

 

local t = LoGetModelTime()

local altBar = LoGetAltitudeAboveSeaLevel()

local altRad = LoGetAltitudeAboveGroundLevel()

local pitch, bank, yaw = LoGetADIPitchBankYaw()

local HSI = LoGetControlPanel_HSI()

local speed = LoGetIndicatedAirSpeed()

 

socket.try(c:send(string.format("t = %.2f, alrRad = %.2f, altBar = %.2f, bank = %.2f, speed = %.2f\n", t, altRad, altBar, bank, speed)))

 

В логе:

 

Lua::Config::call error LuaExportAfterNextFrame:./Config/Export/Export.lua:75: bad argument #6 to 'format' (number expected, got nil)

 

Заранее благодарю за помощь.

Link to comment
Share on other sites

Кликать тумблеры из стороннего софта получилось отлично.

Теперь следующий вопрос - можно ли как-то получить состояние индикаторов?

В данный момент интересуют:

- ППР (Пульт Пилотажных режимов) - состояние К, Т, В, Н и ДИРУПР (их состояние может менятся не только нажатием соответсвующих кнопок)

- ПВР (Пуль выбора режимов) - состояние АДВ, ППС, ВЦ, НПЦ. Их состояние (вроде бы) меняется только от соответвующих кнопок, но было бы правильнее брать из сима

- Макимум индикаторов с верхнего пульта.

 

Заранее спасибо.

Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде.

Мой блог | My blog

Link to comment
Share on other sites

  • Recently Browsing   0 members

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