Jump to content

lua-скрипты


Recommended Posts

Здравствуйте! Подскажите, если кто делал, как добавить пункты в настройки "Осевые команды". Хочу добавить "ИТ-23 яркость", "ИТ-23 контраст" и "НСЦ яркость". А то на джое (Logitech G940) три свободные оси (крутилки) остались, хочу их забить. Заранее спасибо!

Link to comment
Share on other sites

  • Replies 308
  • Created
  • Last Reply

Top Posters In This Topic

mkmax, т.е. можно ли в реал-тайме получать картинку из игры по аналогии с приборами? Как к картинке обратиться сторонней программой? Откуда функция OpenFileMapping взялась?

По идее должно быть что-то вроде такого, но не уверен:

 

export.lua

function LuaExportAfterNextFrame()

local name = "mfd0" --full SHKVAL screen

local Image = LoSetSharedTexture(name)

socket.try(c:send(Image))

как отправить картинку по сокету?

Link to comment
Share on other sites

Здравствуйте! Подскажите, если кто делал, как добавить пункты в настройки "Осевые команды". Хочу добавить "ИТ-23 яркость", "ИТ-23 контраст" и "НСЦ яркость". А то на джое (Logitech G940) три свободные оси (крутилки) остались, хочу их забить. Заранее спасибо!

Вообще, осевые команды джойстику можно добавить в D:\Games\ka50\Config\Input\Aircrafts\ka-50\joystick\default.lua (секция axisCommands, в самом низу). При правильном добавлении они появятся в интерфейсе. Конкретно для ИТ-23 и НСЦ осевых команд, насколько я знаю, не предусмотрено.

mkmax, т.е. можно ли в реал-тайме получать картинку из игры по аналогии с приборами? Как к картинке обратиться сторонней программой? Откуда функция OpenFileMapping взялась?

По идее должно быть что-то вроде такого, но не уверен:

как отправить картинку по сокету?

В реалтайме будет тормозить, получать лучше несколько раз в секунду. Или раз в несколько секунд. CreateFileMapping & Co - функции WinAPI для работы с памятью, существуют со времен Windows 2000. Как отправить картинку по сокету я не знаю, и смысла это делать не вижу.

 

Пример программы на срр, читающей картинку со шквала и пишущей её в D:\Games\fc2\mfd0.bmp:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#pragma comment(lib, "user32.lib")

TCHAR szSharedName[]=TEXT("mfd0");
TCHAR szFileName[]=TEXT("D:\\Games\\fc2\\mfd0.bmp");

int _tmain()
{
  HANDLE hMapFile;
  char* pBuf;

  //открываем нашу текстуру
  hMapFile = OpenFileMapping(
                  FILE_MAP_ALL_ACCESS,		// read/write access
                  FALSE,					// do not inherit the name
                  szSharedName);			// name of mapping object 
  if (hMapFile == NULL) 
  { 
     _tprintf(TEXT("Could not open file mapping object (%d).\n"), GetLastError());
     return 1;
  } 

  //берем указатель на данные
  pBuf = (char*)MapViewOfFile(hMapFile,	// handle to map object
              FILE_MAP_ALL_ACCESS,			// read/write permission
              0,                    
              0,                    
              0);                   
  if (pBuf == NULL) 
  { 
     _tprintf(TEXT("Could not map view of file (%d).\n"), GetLastError()); 
     CloseHandle(hMapFile);
     return 1;
  }

  //в памяти лежит... кхм... не совсем стандартный битмап. Приводим к человеческому виду
  BITMAPFILEHEADER fh;
  BITMAPINFOHEADER* ih = (BITMAPINFOHEADER*)(pBuf+4);
  DWORD dataSize = ih->biHeight * ih->biWidth * ih->biBitCount / 8;
  DWORD bytesWritten = 0;
  fh.bfType = 0x4d42;
  fh.bfSize = dataSize + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
  fh.bfOffBits = 0x40;
  fh.bfReserved1 = fh.bfReserved2 = 0;
  //поворачиваем вверх головой
  ih->biHeight = -ih->biHeight;
  //выгружаем в файл
  HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0);
  if (hFile == NULL)
  { 
     _tprintf(TEXT("Could not create file for writing (%d).\n"), GetLastError()); 
  UnmapViewOfFile(pBuf);
     CloseHandle(hMapFile);
     return 1;
  }
  //заголовок файла
  if (WriteFile(hFile, &fh, sizeof(BITMAPFILEHEADER), &bytesWritten, 0) == NULL)
  { 
     _tprintf(TEXT("Error writing data file header (%d).\n"), GetLastError()); 
  CloseHandle(hFile);
  UnmapViewOfFile(pBuf);
     CloseHandle(hMapFile);
     return 1;
  }
  //заголовок данных
  if (WriteFile(hFile, ih, sizeof(BITMAPINFOHEADER), &bytesWritten, 0) == NULL)
  { 
     _tprintf(TEXT("Error writing data info header (%d).\n"), GetLastError()); 
  CloseHandle(hFile);
  UnmapViewOfFile(pBuf);
     CloseHandle(hMapFile);
     return 1;
  }
  //данные
  if (WriteFile(hFile,pBuf + 4 + sizeof(BITMAPINFOHEADER), dataSize, &bytesWritten, 0) == NULL)
  { 
     _tprintf(TEXT("Error writing data (%d).\n"), GetLastError()); 
  CloseHandle(hFile);
  UnmapViewOfFile(pBuf);
     CloseHandle(hMapFile);
     return 1;
  }

  //деинициализация
  CloseHandle(hFile);
  UnmapViewOfFile(pBuf);
  CloseHandle(hMapFile);
  return 0;
}

Link to comment
Share on other sites

  • 2 weeks later...

Я в программировании не силён, но у меня такой вопрос: какой файл нужно изменить, чтобы на акулу повесить вихри на все узлы подвески. Можно ли прикрутить к ка 50 ракуту Х 25 МЛ?

Link to comment
Share on other sites

Я в программировании не силён, но у меня такой вопрос: какой файл нужно изменить, чтобы на акулу повесить вихри на все узлы подвески. Можно ли прикрутить к ка 50 ракуту Х 25 МЛ?

 

Х-25МЛ и так может вешаться на крайние точки подвески

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Я в программировании не силён, но у меня такой вопрос: какой файл нужно изменить, чтобы на акулу повесить вихри на все узлы подвески. Можно ли прикрутить к ка 50 ракуту Х 25 МЛ?

 

Можно всё , но вихри на внуренних полонах неподвижны , Х - 25 вешается в редакторе , если вешать ракеты с лазерным наведением Х - 25 , хелфайр , то они наводятся на цель твоего ведомого .

По сети с измененными файлами не полетаешь .

Будьте осторожнее в своих желаниях.

Прошу все мои сообщения считать случайным набором букв , цифр , и прочих знаков орфографии, не несущих смысловой нагрузки.

Link to comment
Share on other sites

Одолел. Теперь, если вдруг соберусь строить железный кокпит - буду знать, откуда тянуть данные :music_whistling:

поделись опытом как это сделал

Intel Core 2 CPU 6300 @ 1.86GHz, 2,0GB RAM, ASUS EAH6850 DirectCU 1GB GDDR5

Saitek X 52 PRO

Link to comment
Share on other sites

  • 3 weeks later...
  • 4 weeks later...
жаль что поздно заметили.

 

значит так - механизм кастомных триггеров в симе есть и он работает. но в редакторе я его забыл прописать.

поэтому:

 

1) в файле me_mission.lua в районе строки 1056 вставляем такую сентецию (это что бы кастомные триггеры сохранялись при сохранении миссии)

  um.customtrigfunc = mission.customtrigfunc or {}

после чего заходим в редактор, сохраняем миссию и получаем новую таблицу

customtrigfunc = 
{
}, -- end of customtrigfunc

2) прописываем туда кастомные триггеры

customtrigfunc = 
{
[1] = "if c_time_after(\"20\") then a_out_text_delay(\"Работает\", \"10\"); end;",
},

 

вроде все. попробуй Сергей и скажи что получится.

 

Не получается нет секции

customtrigfunc =

{

}, -- end of customtrigfunc

Будьте осторожнее в своих желаниях.

Прошу все мои сообщения считать случайным набором букв , цифр , и прочих знаков орфографии, не несущих смысловой нагрузки.

Link to comment
Share on other sites

  • 1 month later...

Экспорт для построения диаграммы посадки

 

Добрый день :)

Предлагаю простой скрипт экспорта ЛОГС2, оптимизированный для построения диаграммы процесса посадки. В файл выгружаются основные параметры, некоторые из них в масштабе 1:10 или 1:100 для удобства чтения графика.

Чтобы построить диаграмму, получившийся файл \Temp\Flight_data\Flight-(дата и время).txt импортируются в какой-либо редактор таблиц, например Google Docs или MS Office Excel, и после несложных манипуляций получаем на выходе примерно такую диаграмму(см.рисунок).

Момент посадки легко определяется по данным из файла \Temp\debrief.log.

Запись в файл производится каждые 0,5 сек при активном режиме Landing и автоматически начинается c момента, когда барометрическая высота станет меньше 100 м.

Каталог \Temp\Flight_data\ надо создать заранее.

 

Естественно нужно активировать функцию экспорта в файле \Config\Export\Config.lua, раскомментировав строку EnableExportScript = true,

если это не было сделано ранее.

 

В архиве Export_for _DCSW.zip версия для DCS World, пишет данные в каталог C:\dcsw_flight_data\

Каталог надо создать заранее.

Экспорт в файл начинается с барометрической высоты 550 м при активном режиме Landing.

Flight_Chart_Sample.thumb.png.44115bd1b531790335fb18e2b21e942f.png

Export.lua


Edited by =Andre=
небольшие уточнения
  • Like 1

Gametrix JetSeats thread (in English) ,

SimShaker addon for bass-shakers thread (in English),

Andre's blog, downloads, manuals (in English).

 

 

[sIGPIC][/sIGPIC]

Link to comment
Share on other sites

  • 4 months later...
  • 4 months later...

Фигура пилота в кабине

 

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

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

Строка:

 
draw_pilot      = false

поменять на

 
draw_pilot      = true

 

не помогает... в Warthog 1.1.1.1 вообще нет такой настройки "Фигура пилота в кабине", скорее всего и Ка-50 1.1.1.1 подогнали - убрали фигуру пилота в кабине, только забыли убрать строку "Фигура пилота в кабине" в настройках управления


Edited by Бык
Link to comment
Share on other sites

  • 2 weeks later...

Уважаемые форумчане!

 

Пробовал ли кто-нибудь прикрутить к DCS ЧА2 или А10С приборные панели Saitek Instrument Panel?

 

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

 

Выглядит довольно заманчиво - прикрутить все это "наследие FSX" к Акуле. Втройне заманчиво, если удастся "вытянуть" функционал, заложенный по дефолту в этих панелях под FSX, а именно: 1) Возможность выводить разные шкалы, и 2) Возможность использовать энкодеры на панельке как ручки на приборах.

 

Поиск по форуму не помог...

 

UPDATE:

 

Уважаемые разработчики!

 

Благодаря разговорам с умными людьми (спасибо mkmax!), в моей неуемной голове родился вот такой вопрос: если в Акулу встроили в той или иной степени "нативную" поддержку Saitek X52Pro (вплоть до управления состоянием светодиодов и информации на MFD), означает ли это, что вы "осилили" сайтоковский API (ибо описанный функционал лежит за рамками MS DirectInput)? А если да, то можно ли как-то более детально изучить принципы взаимодействия Акулы именно с этими девайсами?


Edited by SV_huMMer

=================

"Если вы боитесь высоты, значит, вы просто еще не пугались ее отсутствия"

"If you fear heights, you simply haven't yet feared the absence thereof"

=================

Core i7 2600K, ASUS P8Z68 Deluxe/Gen3, 32GB DDR3 1600, Radeon HD 7950, 256Gb SSD Crucial M4, 2TB Samsung SATAIII, 1,5TB WD SATAIII, 650W Enermax Modu87+

Link to comment
Share on other sites

  • 1 month later...

Как сделать обработчик ошибки внутри функции?

 

есть экспорт который открывает несколько соединений:

 

 

function LuaExportStart()

package.path = package.path..";.\\LuaSocket\\?.lua"

package.cpath = package.cpath..";.\\LuaSocket\\?.dll"

socket = require("socket")

 

RazClient = socket.udp()

RazClient:setsockname("127.0.0.1", 8092)

RazClient:setpeername("127.0.0.1", 8090)

RazClient:settimeout(0)

 

Panel_tcp = socket.try(socket.connect("127.0.0.1",20081))

Panel_tcp:setoption("tcp-nodelay",true)

 

Panel_udp = socket.udp()

Panel_udp:setpeername("127.0.0.1", 20083)

Panel_udp:settimeout(0)

 

PPI = socket.udp()

PPI:setpeername("127.0.0.1", 20082)

PPI:settimeout(0)

end

 

 

Как сделать так, чтобы в случае ошибки при создании TCP соединения экспорт всё равно бы работал?

 

Я пробовал так:

 

	try
{
Panel_tcp = socket.try(socket.connect("127.0.0.1",20081))
Panel_tcp:setoption("tcp-nodelay",true)
}.except(Exceptions.ValueError)
{}

 

Но экспорт выдаёт ошибку ./Config/Export/Export.lua:16: '}' expected (to close '{' at line 14) near 'Panel_tcp'

Где эту скобку только не пытался вставлять, всё равно ошибка.

 

Пробовал и так

 

	try
Panel_tcp = socket.try(socket.connect("127.0.0.1",20081))
Panel_tcp:setoption("tcp-nodelay",true)
end

 

Dispatcher::Can't execute Lua file ./Config/Export/Export.lua - ./Config/Export/Export.lua:14: '=' expected near 'Panel_tcp'

 

Насколько я понимаю обработчик работает только на всю фукцию, можно ли как-то обрабатывать часть кода внутри?

Link to comment
Share on other sites

Как сделать обработчик ошибки внутри функции?

 

#!/usr/bin/env lua

require "socket"

foo = socket.protect(function()
local c = socket.try(socket.connect("0.0.0.0", 10309))
local try = socket.newtry(function() c:close() end)
try(c:send("hello there?!\r\n"))
local answer = try(c:receive())
print(answer)
try(c:send("good bye\r\n"))
c:close()
end)

foo()

 

вот пример, надеюсь поможет.

Alpha team, JaZZ

Link to comment
Share on other sites

  • 3 weeks later...

Здравствуйте,у меня появилась проблемка,при редактировании файла sfm_aerod.lua

а конкретно вот эти строки:

0.49, 0.0165, 0.0670, 0.1, 0.158, 0.178, 24., 1.5,

0.5, 0.0165, 0.070, 0.1, 0.170, 0.210, 24., 1.5,

0.51, 0.0165, 0.076, 0.094, 0.184, 0.255, 24., 1.5,

если я ставлю запятую как и должно быть(обозначена красным) после значения М=0.5,игра выдаёт ошибку,убираю,работает,хотя после остальных значений запятая стоит,и всё работает,подскажите пожалуйста,что делать?за ранее спасибо.

Link to comment
Share on other sites

  • 3 months later...

кто-то использовал функцию??

 

* void net.write_debriefing(str)

 

Writes user-defined event to Temp/debrief.log file. The string "XXX" is written as:

{t=[current mission time], XXX},

 

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

 

net.write_debriefing("a1=1,a2=2,a3=3")

на выходе получим {t=[current mission time], a1=1,a2=2,a3=3},

делаю так - ничего в лог не пишет...

делаю так:

net.write_debriefing("{t=[current mission time], a1=1,a2=2,a3=3}")

опять ничего не пишет... может есть третий вариант?

ибо ставлю строчкой выше * void net.log(string msg) и все в нетлог замечатльно пишется а в debrief.log не хочет...

Alpha team, JaZZ

Link to comment
Share on other sites

  • 4 weeks later...
Поднимаешь сокет на С# и отправляешь данные в него из export.lua

Во вложении - класс, который я писал для связи с DCS. Там кое-где есть комментарии, думаю всё понятно. Ключевое событие -

MessageRecieved.

 

Кроме этого можешь глянуть на проект http://touchpal.googlecode.com/, там фактически готовое приложения для связи с DCS, см ветку.

 

А можно еще красивее - запускать код на C# прям из скрипта: дока и библиотечка.

 

Я дико извиняюсь, не программист я, Вы случайно не подскажете, а как воспользоваться этим классом? Я его и так и эдак.... Нифига не получается. Я наверно ща совсем обнаглею, но может быть Вы можете, для примера, выложить ПРОЕКТ какой-нить рабочий, типа вынуть данные из DCS и положить в файл. А? Ну пожалста...:cry:

Выпитая водка не влияет на ТТХ истребителей!!!

Слава ЕД!!! У меня есть АФМ к Су-33!!!!!!

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

уважаемые знатоки! как в ка 50 отключить тримирования педалей. а то с g940 летать, у меня не выходит. зарание спасибо.

Maximus V Gene Z77. I5 2500K 4.5GHZ.gtx 780 ti windforce. SAMSUNG 55 1920-1080+SAMSUNG 23 2048-1152 ШКВАЛ АБРИС. LOGITECH G940- ПЕДАЛИ С МИ-8. G930. TrackIR 5.

Link to comment
Share on other sites

  • 3 months later...

Подскажите, какие функции отвечают за наличие подвесок и типа подвесок?

Вот тут кол-во выбранных подвесок, как я понял и какая-то таблица подвесок.

LoGetPayloadInfo() -- return weapon stations
result_of_LoGetPayloadInfo 
{
CurrentStation = , -- number of current station (0 if no station selected)
Stations = {},-- table of stations]
}

А это, типа контейнер - да/нет, например кмгу?

Дальше, тип оружия и количество?

station 
{
container = true/false , -- is station container
weapon    = {level1,level2,level3,level4} , -- world database classification of weapon
count = ,
}

[sIGPIC][/sIGPIC]

Реальные хотелки к ЛО3 по Су-25 в основном...

ASRock PG9, i-5 9600KF, MSI 2080Ti, 32GB 3466

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 months later...
не помогает... в Warthog 1.1.1.1 вообще нет такой настройки "Фигура пилота в кабине", скорее всего и Ка-50 1.1.1.1 подогнали - убрали фигуру пилота в кабине, только забыли убрать строку "Фигура пилота в кабине" в настройках управления

 

DCS World\MODS\aircrafts\Ka-50\Cockpit\Scripts

 

файл

'mainpanel_init.lua'

 

'draw_pilot' поменять false на true

 

2ab74825741c5a6b9dab477a6be9090f.jpg 26acce5ed6458c3cbb0a2c57bede1db2.jpg

Link to comment
Share on other sites

  • Recently Browsing   0 members

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