FreemanRU Posted October 29, 2008 Posted October 29, 2008 (edited) Первое, что хотелось бы отметить - Поиск по слову "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 November 11, 2008 by FreemanRU 2 Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
FreemanRU Posted October 29, 2008 Author Posted October 29, 2008 Сразу вопросы: 1. Где можно взять соотвествие между английским именование команд и русским (секция LoSetCommand в Export.lua)? 2. Как можно получить значение индикатора автомата отстрела ловушек? 3. Как можно получить состояние кнопок пульта выбора режимов ПВР (АДВ, ППС, ВЦ, НПЦ)? Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
FreemanRU Posted November 3, 2008 Author Posted November 3, 2008 (edited) Описание параметров 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 November 3, 2008 by FreemanRU Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
Dmut Posted November 3, 2008 Posted November 3, 2008 (edited) номера аргументов тоже зашиты в модель, как и имена коннекторов, и в скрипт прописываются для того, что бы сим знал, что за что дергать. pos = {10.05, 0.216,-1.045} это прописывается для моделей старого формата, где нет нужных коннекторов. если есть .connector_name = '...', то pos={...} не нужен Edited November 3, 2008 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]
FreemanRU Posted November 3, 2008 Author Posted November 3, 2008 (edited) Во вложении - файл 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=546kilo.zip Edited November 13, 2008 by FreemanRU 1 Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
TRENER Posted November 4, 2008 Posted November 4, 2008 Подставил 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
FreemanRU Posted November 4, 2008 Author Posted November 4, 2008 Условия, трек? Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
2803serg Posted November 6, 2008 Posted November 6, 2008 Молодцы, хороший вопрос подняли, я вот как раз задумывался анимировать на "Боре" пусковую ЗРК или нет. По умолчанию (сужу по Локону) она нерабочая была.
FreemanRU Posted November 11, 2008 Author Posted November 11, 2008 Добавил примеры использования LUA в LO\DCS Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
FreemanRU Posted November 11, 2008 Author Posted November 11, 2008 (edited) Еще одна маленькая модификация. Если кто не в курсе - в игре есть масса команд, которые можно передавать в сим, но которые не выведены в настройки управления. В настройках доступно 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"], а настроить кнопки непосредственно из интерфейса игры - новые команды будут там достпуны. Вот так это выглядет в интерфейсе игры после модификации: Точно также нужно модифицировать файлы скриптов джойстиков. Edited November 13, 2008 by FreemanRU 2 Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
FreemanRU Posted November 11, 2008 Author Posted November 11, 2008 Разработчики, ну пооожаааааааалуйста, дайте полный список команд для LoSetCommand :cry: Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
crumstler Posted November 12, 2008 Posted November 12, 2008 FreemanRU, еще раз спасибо (теперь, публично). А разработчики действительно что-то совсем затихарились... :-( =303=Crum
FreemanRU Posted November 13, 2008 Author Posted November 13, 2008 Настройки "быстрых взглядов" ..\Config\View\SnapViews.lua, SnapViewsDefault.lua, View.lua Дефолтные быстрые взгляды заданы в файле SnapViewsDefault.lua, пользовательские определяются в SnapViews.lua. А в файле View.lua есть строки (значения тут по умолчанию): DisableSnapViewsSaving = false UseDefaultSnapViews = false в которых определяется доступность cохранения пользовательских быстрых взглядов и использование только дефолтных. Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
ED Team Chizh Posted November 13, 2008 ED Team Posted November 13, 2008 Разработчики, ну пооожаааааааалуйста, дайте полный список команд для LoSetCommand :cry: Смысловое описание команд смотри например в Default.lua для клавиатуры. Номера команд описаны в приаттаченных файлах. iCommand.h - кнопочные команды. Actions.h - непрерывные оси.LoSetCommand.rar Единственный урок, который можно извлечь из истории, состоит в том, что люди не извлекают из истории никаких уроков. (С) Джордж Бернард Шоу
ED Team Alex Okean Posted November 13, 2008 ED Team Posted November 13, 2008 Итак приступим к постановке переключателя в конкретное положение посредством программирования. Для этого нам понадобится 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 1
FreemanRU Posted November 13, 2008 Author Posted November 13, 2008 ОГРОМНОЕ спасибо :) Будет над чем поработать :) ЗЫ А найти скрипт автозапуска я не догадался :( Тормоз, однако.. Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
Olsiv Posted November 13, 2008 Posted November 13, 2008 FreemanRU а напишите пожалуйста, что где нужно прописать, чтобы фигура пилота была в кабине по-умолчанию.( стандартно её по-умолчанию нет)
FreemanRU Posted November 14, 2008 Author Posted November 14, 2008 FreemanRU а напишите пожалуйста, что где нужно прописать, чтобы фигура пилота была в кабине по-умолчанию.( стандартно её по-умолчанию нет) Сейчас негде проверить точно, но скорее всего вот так: Скрипт - ..\Scripts\Aircrafts\Ka-50\Cockpit\mainpanel_init.lua Строка: draw_pilot = false поменять на draw_pilot = true Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
Lemon Lime Posted November 14, 2008 Posted November 14, 2008 При попытке сделать полезный осветительный НАР из ненужного маркерного, прилепив к нему скотчем лампочку от САБа, игра выпадает в осадок в момент, когда должна зажечься лампочка (в крэш-файле упомянут 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.
Olsiv Posted November 14, 2008 Posted November 14, 2008 Сейчас негде проверить точно, но скорее всего вот так: Скрипт - ..\Scripts\Aircrafts\Ka-50\Cockpit\mainpanel_init.lua Строка: draw_pilot = false поменять на draw_pilot = true Спасибо попробуем))
Mazit Posted November 15, 2008 Posted November 15, 2008 (edited) Вид только ИЛС я хотел использовать, при строительстве кокпита, хотел этот вид с помощью MATROXa http://forums.eagle.ru/showpost.php?p=548969&postcount=26 вынести на три монитора,былобы похоже на кабину....., а скажи никак нельзя в будущем cделать, допустим, вид как он есть сейчас и вид только ИЛС, как он выглядит в ЛО. Допустим,построил я кабину ,Шквал и АБРИС у меня расположены там где и должны быть,и на виде из кабины,я не хочу штобы там изображалась кабина, значит, мне нужен вид только ИЛС, и в данном случае получится, что шквал и АБРИС у меня ещё раз показываются, да к тому же там где вообще они не нужны..... Может быть разработчики подумают об этом, и в патче реализуют, я думаю, что это нужно, ведь нверняка не сложно организовать вид ТОЛЬКО ИЛС, без всего остального, а то кабину с большим обзором не построить. Edited November 15, 2008 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/ Hotas Cougar- FFBeast/ Rudder Pedals FFBeast/ VR HTC VIVE PRO
ED Team Alex Okean Posted November 15, 2008 ED Team Posted November 15, 2008 В файлах 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}}}
Lemon Lime Posted November 18, 2008 Posted November 18, 2008 Пардон, немножко повторюсь:При попытке сделать полезный осветительный НАР из ненужного маркерного, прилепив к нему скотчем лампочку от САБа, игра выпадает в осадок в момент, когда должна зажечься лампочка (в крэш-файле упомянут 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.
centrino1500 Posted November 19, 2008 Posted November 19, 2008 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) Заранее благодарю за помощь.
FreemanRU Posted November 25, 2008 Author Posted November 25, 2008 Кликать тумблеры из стороннего софта получилось отлично. Теперь следующий вопрос - можно ли как-то получить состояние индикаторов? В данный момент интересуют: - ППР (Пульт Пилотажных режимов) - состояние К, Т, В, Н и ДИРУПР (их состояние может менятся не только нажатием соответсвующих кнопок) - ПВР (Пуль выбора режимов) - состояние АДВ, ППС, ВЦ, НПЦ. Их состояние (вроде бы) меняется только от соответвующих кнопок, но было бы правильнее брать из сима - Макимум индикаторов с верхнего пульта. Заранее спасибо. Всё сказанное автором - вымесел, и не может быть использовано как доказательство в суде. Мой блог | My blog
Recommended Posts