Jump to content

DCS: World Scripting Engine


Recommended Posts

Описание функций и данных для классов.

 

Доброго всем времени суток.

Решил выложить пару файлов в помощь разработчикам миссий с использованием SSE.

В файле миссии скрипт, который после запуска записывает в лог все, что относится к следующему списку:

[1] = env,
[2] = trigger,
[3] = coalition,
[4] = Object,	--
[5] = Group,--
[6] = Unit,--
[7] = MovingObject,
[8] = SceneryObject,--
[9] = StaticObject,--
[10] = Weapon,--
[11] = Airbase,--	
[12] = Controller,--	
[13] = Spot,	--
[14] = World

на глубину на 3 уровня.

Вообще рекомендовал бы выполнять этот скрипт после обновлений. В файле lua обработанный результат.

Что это и как пользоваться?

В исходном скрипте все что пришло в голову использовать как верхний уровень.

Строка с (); в конце узнаваемо является функцией и выполняет какие либо действия. Подробнее о действиях как указано ниже, написано здесь, там же и другие данные, но скрипт позволил их актуализировать.

в {} заключены свойства класса. Обратите внимание, что некоторые классы, могут быть подклассами для других классов.

Так класс Object - подкласс Unit-a и StaticObject, т.е. у Unit-a и StaticObject есть особые свойства и общие между собой свойства равные свойствам Object. Опытный скриптер в целом безусловно и так поймет что в lua-файле и наверняка уже имеет у себя нечто подобное, но облегчить труды не помешает :)

opisanie_classov.miz

All_class_1.5.4.lua

Link to comment
Share on other sites

  • 5 months later...
  • Replies 169
  • Created
  • Last Reply

Top Posters In This Topic

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

Создал скрипт, в котором использовал world.event.S_EVENT_ENGINE_STARTUP

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

Но вот в онлайне начались чудеса!!!

Во первых этот эвент срабатывает только для серверного ЛА, т.е. если на сервер заходит игрок и запускает ЛА, то скрипт этого не видит.

Во вторых, даже для серверного ЛА невозможно получить ID аэродрома (но это уже вторично).

Как это можно победить и в чем причина такого поведения.

Испытывали на чистой версии сервера open beta без модов.

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

P.P.S Кто нибудь в курсе, в онлайне getGroup() теперь работает или нет?

Link to comment
Share on other sites

  • 2 weeks later...

Всех с Новым Годом господа..

 

скажите пожалуйста, если кто знает, как в lua получить табличные данные SSE? функция net.dostring_in() возвращает только строку.

Link to comment
Share on other sites

Всех с Новым Годом господа..

 

скажите пожалуйста, если кто знает, как в lua получить табличные данные SSE? функция net.dostring_in() возвращает только строку.

Взаимно!

net.dostring_in() Apiшняя же функция?! Таблицы луа (включая SSE) строку из себя и представляют. Посмотрите принцип формрования таблиц lua в описании языка.

Link to comment
Share on other sites

Я ,скорее всего, неправильно объяснил, мне нужно в луа передать саму таблицу, допустим юнита, а не содержащиеся в них данные. Например, у нас есть Group.getUnits(..), мы получаем таблицу, так вот как ее передать в луа


Edited by Timujin
Link to comment
Share on other sites

Я ,скорее всего, неправильно объяснил, мне нужно в луа передать саму таблицу, допустим юнита, а не содержащиеся в них данные. Например, у нас есть Group.getUnits(..), мы получаем таблицу, так вот как ее передать в луа

Lua- это язык, на котором работает и SSE и DCSApi (о котором Вы и говорите).

Луа хранит таблицу именно в строке, она не имеет вид таблицы в нашем обычном понимании.

Local _perem = чегото там; - луа интерпретирует как строковую переменную.

Local _perem = {чегото там, еще строка, {вообще подтаблица}} - луа интерпретирует как таблицу, но все это передается как строка.

Link to comment
Share on other sites

Link to comment
Share on other sites

К сожалению не подходит, может кто знает, в lua можно подгружать dll, но нужны, насколько я понимаю, точки входа

что-то типа

local func = require(scripting.dll)

func.функция_в_dll(переменные,переменные)

Link to comment
Share on other sites

Доброго вечера господа

 

такой вот вопрос, ф-ия coalition.addGroup() рождает на свет группу, а в какую таблицу он её "записывает"? поскольку не совсем понятно...Например, при исполнение ф-ии Group.getByName() возвращяется таблица с полем id_, числовое значение которого является id группы, но не сама таблица с группой, или например при исполнение ф-ии Unit.getSensors() возвращается таблица, хотя Unit.getByName() возвращяется что -же что и Group.getByName()..я пытался найти в окружение (0) но там есть DCS db Group Unit, а искомой группы нету..подскажите где копать, если кто знает?

Link to comment
Share on other sites

Group.getByName() возвращяется таблица с полем id_, числовое значение которого является id группы, но не сама таблица с группой, или например при исполнение ф-ии Unit.getSensors() возвращается таблица, хотя Unit.getByName() возвращяется что -же что и Group.getByName()

Таблица _id по сути описание Группы(юнита) применительно к данной группе (юниту).

Хорошо все описано здесь http://wiki.hoggit.us/view/DCS_func_getByName

Вообще сам пользуюсь http://wiki.hoggit.us/view/Category:Scripting

Link to comment
Share on other sites

Таблица _id по сути описание Группы(юнита) применительно к данной группе (юниту).

 

Странно, вот кусок кода

 

local value = Group.getByName(имя_группы)

type(value.id_) возвращаяет тип "number"

tonumber(value.id) = id группы

Link to comment
Share on other sites

Странно, вот кусок кода

 

local value = Group.getByName(имя_группы)

type(value.id_) возвращаяет тип "number"

tonumber(value.id) = id группы

Так правильно, второй строкой и запрашивают из всей таблицы свойств только id

local _name = value:getName(); - имя группы вернет

local _units = value:getUnits(); - таблицу юнитов вернет, где #_units вернет количество юнитов в группе и т.д.

Link to comment
Share on other sites

Так правильно, второй строкой и запрашивают из всей таблицы свойств только id

local _name = value:getName(); - имя группы вернет

local _units = value:getUnits(); - таблицу юнитов вернет, где #_units вернет количество юнитов в группе и т.д.

 

фишка в том что Group.getUnits() или как я понял что идентично Value:getUnits() возвращает вот такое

{ [1] = {id_=123456789}, [...] = {id_ = ....} }

Link to comment
Share on other sites

а функция getmetatable(value) возвращяет значения:

activate

embarking

isExist

className_

parentClass_

getCategory

Category

__index

getInitialSize

tonumber

__tonumber

__newindex

__le

__eq

getCoalition - тип "функция"

getController - тип "функция"

__lt

getSize - тип "функция"

getID - тип "функция"

destroy- тип "функция"

getName - тип "функция"

getUnits - тип "функция"

getByName - тип "функция"

getUnit - тип "функция"

Link to comment
Share on other sites

В продолжение предыдущего поста

 

Если я выполню

local a={}

local i=1

for value in pairs(Export) do

a = value

i=i+1

end

 

,внутри SSE то я получу таблицу с длиной 58, если я тоже самое выполню в DCS Api, то я получу идентичную таблицу. но если добаялю еще одну позицию в Export, то на "противополножной" стороне она не добавляется. Получается у нас 2 таблицы Export? Вопрос такой , в какой файл мне добавить глобальную таблицу, чтобы я мог иметь доступ к ней и в DCS Api и в SSE?

Link to comment
Share on other sites

Помогите кто может.

Мне нужно что бы юнит достигнув ППМ поднимал флаг или присваивал значение флагу.

Можно-ли вот сюда написать короткий скриптик который бы флагу присваивал значение?

8852796.jpg

Без разрыва шаблонов — нет прогресса.

Link to comment
Share on other sites

Помогите кто может.

Мне нужно что бы юнит достигнув ППМ поднимал флаг или присваивал значение флагу.

Можно-ли вот сюда написать короткий скриптик который бы флагу присваивал значение?

 

trigger.action.setUsetFlag('имя флага', 'значение флага');

Link to comment
Share on other sites

trigger.action.setUsetFlag('имя флага', 'значение флага');

 

Проблем какой то (

Это может быть из за того что у меня версия 1.5.3?

8871235.jpg

Без разрыва шаблонов — нет прогресса.

Link to comment
Share on other sites

С телефона писал, ошибочка, не 'UsetFlag', а 'UserFlag'

 

Получилось, это просто спасенье!

Теперь граничные триггеры в миссии мне почти не нужны, а самих строчек с триггерами станет в 2 раза меньше. Теперь очень просто проверить где юнит, где колонна прошла, чей населённый пункт... ООо это божественно!

Без разрыва шаблонов — нет прогресса.

Link to comment
Share on other sites

Прошу помощи.

 

Доброго все!

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

Суть проблемы заключается в следующем, в SSE есть возможность выполнять некоторые действия по событиям в ходе миссии через addEventHandler. В общем-то есть список этих самых событий. Как правило все эти события записываются в дебрифинг (см.файл). Но в текущем дебрифинге мы видим, что несмотря на то, что все стоят на холодном старте в онлайне событие старт и стоп двигателя выполняется ТОЛЬКО ДЛЯ БОТОВ (здесь Пилот#066), то-же самое подтверждается логами с тестовыми миссиями (при необходимости приложу. Т.о. у нас получается, что онлайне и оффлайне фиксация событий происходит по разному, а скрипты пишутся в одинаково (что и логично). В чем причина этого? Как это можно исправить?!!! По этой причине часть интересных функций пришлось просто похоронить!

Теперь по другой теме, прошу помочь всех кто может! Ни как не могу разобраться с классом Spot, как его получить, откуда, в какой момент?

Для примера приложил тестовую миссию, в миссии есть БРДМ, у которой по радиоменю нужно вызвать функцию получения точки падения луча. При выборе пункта "Указать цель" через 10 секунд теоретически скрипт попытается запросить эту точку (10 секунд дается для того, чтобы выйти в режим бинокля и включить лазер или ИК маркер). В скрипте место, где я пытаюсь получить этот луч и его точку помечен комментом. И конечно в разных интерпретациях и вариантах у меня ничего не получается, а очень хочется! Вопрос, как получить Spot?!!

Заранее благодарен тем кто хоть как-то разъяснит работу с этим классом.

artyllery.miz

debrief.zip

Link to comment
Share on other sites

  • 5 months later...

Здравствуйте

 

сразу уточню, группы добваляются динамично, с помощью coalition.addGroup(). Так вот, если группа удаляется принудительно, с помощью Group.destroy(), то следуюущая группа добавляется с другим ID, но если группа, скажем, была уничтожена или упала и взорвалась, то добавленная группа появляется с тем же ID, что приводит к ошибкам или вылетам

Link to comment
Share on other sites

Здравствуйте

 

сразу уточню, группы добваляются динамично, с помощью coalition.addGroup(). Так вот, если группа удаляется принудительно, с помощью Group.destroy(), то следуюущая группа добавляется с другим ID, но если группа, скажем, была уничтожена или упала и взорвалась, то добавленная группа появляется с тем же ID, что приводит к ошибкам или вылетам

 

Сам назначай ID при генерации группы. Начни, например, с 10000 и счетчиком по единице добавляй.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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