Jump to content

lua-скрипты


Recommended Posts

Alex, пока речь зашла об экспорте - можно спросить: какие еще device-ы поддерживают получение информации из них, и какими командами?

Я попытался по аналогии попробовать получить что-нить с других устройств, но их описание сильно отличается от ADI и HSI, соотвественно ничего ен получилось.

 

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

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

Мой блог | My blog

Link to comment
Share on other sites

  • Replies 308
  • Created
  • Last Reply

Top Posters In This Topic

  • ED Team

Язык тот же, а добавлять в ЛО никто ничего не собирался. Речь только о серии DCS.

Best Regards, Dmitry.

 

"Чтобы дойти до цели, надо прежде всего идти." © О. Бальзак


 
Link to comment
Share on other sites

  • ED Team
А вообще это возможно?

Уже нет.

Развитие игр серии ЛОКОН закончено.

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

Link to comment
Share on other sites

Hello,

1stable, Sorry I m not in the good forum, I don't understand your words...:)

I need an help regarding the export.lua and the socket using. there is an error as soon as I write the buffer.

I want to use the socket.

I developped a mod for the keyboard G15 and his LCD screen.

http://sebcanaud.free.fr/Perso/LOCKON/G15_LockonV1.3.zip (my job)

Under lockon, I get informations and display them on the G15. I want to do the same job with BS.

 

But I have this error

 

very simple export.lua file

Export.lua

------------------------------------

function LuaExportStart()

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

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

socket = require("socket")

host = host or "localhost"

port = port or 6060

c = socket.try(socket.connect(host, port)) -- connect to the listener socket

c:setoption("tcp-nodelay",true) -- set immediate transmission mode

end

 

function LuaExportAfterNextFrame()

local h = LoGetAltitudeAboveSeaLevel()

socket.try(c:send(string.format("h = %f\n",h))) -- line 131

end

 

I execute the game and I have that error on the log file and nothing on the socket.

 

Error.log

-----------------------------------

Lua::Config::call error LuaExportStart:(null)

Lua::Config::call error LuaExportAfterNextFrame:./Config/Export/Export.lua:131: attempt to index global 'c' (a nil value)

 

Do you have an idea please

Regards

Seb

Link to comment
Share on other sites

Did you try removing the "or" statements from host and port?
Там все правильно, это стандартная техника кодирования в lua - смысл ее в том, что если переменной host ничего не присвоено - то присвоить localhost, и с port аналогично.

JGr124 "Katze"

Link to comment
Share on other sites

Хотел добавить в управление команды включения и выключения (отдельно) ГЛАВНОГО выключателя СУО. Но к сожалению в списке команд не обнаружил чего-то подобного.

В iCommand.h команда iCommandSwitchMasterArm - отвечает за вкл/выкл. Если я всё правильно обнаружил.

 

Есть свободный тумблер на переделанном РУДе х45-го. Хотел задействовать именно под главный переключатель.

 

P.S. Собственно вопрос: есть ли возможность добавить самому подобные команды или может плохо искал? : )

Link to comment
Share on other sites

Хотел добавить в управление команды включения и выключения (отдельно) ГЛАВНОГО выключателя СУО. Но к сожалению в списке команд не обнаружил чего-то подобного.

В iCommand.h команда iCommandSwitchMasterArm - отвечает за вкл/выкл. Если я всё правильно обнаружил.

 

Есть свободный тумблер на переделанном РУДе х45-го. Хотел задействовать именно под главный переключатель.

 

P.S. Собственно вопрос: есть ли возможность добавить самому подобные команды или может плохо искал? : )

Есть, но сложный, через export.lua и PerformClickableAction

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

Мой блог | My blog

Link to comment
Share on other sites

Есть, но сложный, через export.lua и PerformClickableAction

 

Насколько сложный в плане объяснения ? : ) Можно на пальцах, если это реально.

Я так понимаю требуется по сути описать два разных события переключения тумблера самому?

Link to comment
Share on other sites

Последовательность действий:

1. Пишем свою программу, которая будет:

а. Создавать сокет и ждать соединения с игрой

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

в. Послать через сокет события в игру

2. Настроить export.lua так, чтобы при приходе информации от программы через сокет он мог:

а. Получить устройство через функцию GetDevice()

б. Сформировать параметры метода PerformClickableAction()

в. Выполнить метод PerformClickableAction()

 

Вот часть Export.lua, который это делает:

 
function ListenConnection()
while (true) do
  io.write("Start connection\n")
  socket.try(c:settimeout(4000)) 
  socket.try(c:send("A live"))
  socket.try(c:settimeout(0)) 

  msg, err = c:receive()
  if msg ~= nil then

    my1, e = string.find(msg,"PerformClick")

    if(my1 == 1) then

      _,_,device,button,command = string.find(msg,"%[(%d+):(%d+):([+-]?%d+.%d+)%]")

      local device = GetDevice(device)
      if device then 
          io.write("\tTry click...")
          device:performClickableAction(button,command)
      end
     end 
  end
  coroutine.yield()
end --while
end

 

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

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

Мой блог | My blog

Link to comment
Share on other sites

Кто-нибудь может проверить Export.lua под Ка50 в мультиплеере?

Есть подозрение, что в мультиплеере не работает функция GetDevice.

Если так - это не просто жопа, это полный писец.

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

Мой блог | My blog

Link to comment
Share on other sites

  • ED Team

 

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

 

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

 

в Config/Input/Aircrafts/Ka-50/keyboard/default.lua

 

команды это просто числа в , соответсвенно если выделить какой нибудь диапазон начиная допустим с миллиона на кастомные команды

(кастомные профайлы после этого надо будет убить и переназначить заново)

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

{down = 1000000, name = 'My Custom Command', category = 'My Custom Category'},

тоже самое для дефолтов джойстика

теперь можно назначить эти команды на клавиатуру и джойстик

 

дальше смотрим scripts/aircrafts/ka-50/device.lua и добавляем

туда свое кастомное устройство

devices["MY_MACROS"]                   = 62 -- всего может быть 254 устройства

 

дальше смотрим scripts/aircrafts/ka-50/device_init.lua и добавляем

 

creators[devices.MY_MACROS]    =  {"avLuaDevice",
                               LockOn_Options.script_path.."my_macros.lua",
                               {},
                               LockOn_Options.script_path.."my_macros_commands.lua",
                               }

 

my_macros_commands.lua ...

KeyCommands =
{
{command = 1000000},
}

вуаля теперь команда прийдет устройству MY_MACROS

 

чтобы обработать это

 

my_macros.lua

 

function SetCommand(command,value)
       if command == 1000000 then	
          -- обрабатываем как хотим 
       else
       end
end


Edited by Alex O'kean
fix syntaxis
  • Like 1
sigpic2354_5.gif
Link to comment
Share on other sites

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

в С++ и C# это решается жестким типизирование. А здесь как?

Т.е. вывод кода

val1 = math.floor(34010.4 / 1000.0)
print("val1 = "..val1)
val2 = 34010.4 - val1 * 1000.0
print("val2 = "..val2)

 

val1 = 34

val2 = 10.400000000001

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

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

Мой блог | My blog

Link to comment
Share on other sites

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

 

 

цитата из документации

 

All values in Lua are first-class values. This means that all values can be stored in variables, passed as arguments to other functions, and returned as results.

There are eight basic types in Lua: nil, boolean, number, string, function, userdata, thread, and table. Nil is the type of the value nil, whose main property is to be different from any other value; it usually represents the absence of a useful value. Boolean is the type of the values false and true. Both nil and false make a condition false; any other value makes it true. Number represents real (double-precision floating-point) numbers. (It is easy to build Lua interpreters that use other internal representations for numbers, such as single-precision float or long integers; see file luaconf.h.) String represents arrays of characters. Lua is 8-bit clean: strings can contain any 8-bit character, including embedded zeros ('\0') (see §2.1).

http://www.lua.org/manual/5.1/manual.html#2.2

sigpic2354_5.gif
Link to comment
Share on other sites

Не, эт я понимаю. Как раз в этом-то и проблема, был бы float или double с одинарной точночстью - проблемы бы не было. Т.к. интерпритатор откомпилен ЕД, то добавить в него другого я не могу.

Т.е. н-р в C# я бы просто жестко привел все компоненты к float. Грубо конечно, но такой точности в даном случае достаточно:

[size=2][color=#0000ff][size=2][color=#0000ff]double[/color][/size][/color][/size][size=2] test = 34010.4 % 1000.0;
[/size][size=2][color=#2b91af][size=2][color=#2b91af]Console[/color][/size][/color][/size][size=2].Write([/size][size=2][color=#2b91af][size=2][color=#2b91af]String[/color][/size][/color][/size][size=2].Format([/size][size=2][color=#a31515][size=2][color=#a31515]"{0}"[/color][/size][/color][/size][size=2], ([/size][size=2][color=#0000ff][size=2][color=#0000ff]float[/color][/size][/color][/size][size=2])test));
[/size]

Выведет 10,4

 

[size=2][color=#0000ff][size=2][color=#0000ff]double[/color][/size][/color][/size][size=2] test = 34010.4 % 1000.0;
[/size][size=2][color=#2b91af][size=2][color=#2b91af]Console[/color][/size][/color][/size][size=2].Write([/size][size=2][color=#2b91af][size=2][color=#2b91af]String[/color][/size][/color][/size][size=2].Format([/size][size=2][color=#a31515][size=2][color=#a31515]"{0}"[/color][/size][/color][/size][size=2], [/size][size=2]test));
[/size]

Выведет 10,4000000000015

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

Мой блог | My blog

Link to comment
Share on other sites

Нашел немного странное поведение крана шасси.

Посылаем ему команду

device:PerformClickableAction(3001,1.0)

Шасси выпускается (отлично)

Посылаем следом эту же команду

device:PerformClickableAction(3001,1.0)

шасси поднимаются (не правильно!)

 

То же самое и с value = 0

С другими тумблерами такого не замечено.

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

Мой блог | My blog

Link to comment
Share on other sites

DCS & Lua: "Кликабельность" через стандартный ввод

С наступающем всех, надеюсь кому-то пригодится :)

Ключевая фраза статьи:

"- имеется возможность уставновить тумблер в конкретное положение, используя кнопку на устройстве ввода"

  • Like 2

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

Мой блог | My blog

Link to comment
Share on other sites

function SetCommand(command,value)
       if command == 1000000 then    
          -- обрабатываем как хотим 
       else
       end
end

А есть ли способ обрабатывать не только кнопки, но и оси?

Я поигрался с AxisCommands, но ничего не получилось...

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

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

Мой блог | My blog

Link to comment
Share on other sites

  • ED Team
А есть ли способ обрабатывать не только кнопки, но и оси?

Я поигрался с AxisCommands, но ничего не получилось...

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

 

А в чем проблема конкретней , желательно с кодом

sigpic2354_5.gif
Link to comment
Share on other sites

  • Recently Browsing   0 members

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