Jump to content

Помощь разработчику миссий


StarLey_Andrew

Recommended Posts

там в самой игре, в целя безопасности, стоит запрет на запись в левые файлы. Скорее всего это делалось для тестирования и забыли убрать лишний код

 

 

разрешить на запись файлов в DCSW:

 

DCS/Skripts/MissionScripting.lua

 

do

sanitizeModule('os')

sanitizeModule('io')

sanitizeModule('lfs')

require = nil

loadlib = nil

end

 

Или там проверка файла не работает )))


Edited by diyk

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

там в самой игре, в целя безопасности, стоит запрет на запись в левые файлы. Скорее всего это делалось для тестирования и забыли убрать лишний код

 

 

разрешить на запись файлов в DCSW:

 

DCS/Skripts/MissionScripting.lua

 

do

sanitizeModule('os')

sanitizeModule('io')

sanitizeModule('lfs')

require = nil

loadlib = nil

end

 

Или там проверка файла не работает )))

 

Спасибо, попробую! Ещё вопрос, где расположен файл для записи по умолчанию: в файле миссии, в DCS\scripts, или в папке Temp?

Link to comment
Share on other sites

local _file = io.open ('veryfile.txt', 'w+'); -- сделать файл (где укажешь, там и расположен)

file:write ('флаг: ' .. trigger.misc.getUserFlag('1')); -- задать

_file:write ('флаг: ' .. trigger.misc.getUserFlag('1')); -- записать

_file:close(); -- закрыть

 

P.S. - Бандит подсказал... При этом сразу сказал что, мало чем данная фича будет полезна. после чего чёт исчез... Оказался -прав ))

 

От себя добавлю - если хочешь что-то выносить - выноси в логи DCS - они по умолчанию открыты на запись из DCS!

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

local _file = io.open ('veryfile.txt', 'w+'); -- сделать файл (где укажешь, там и расположен)

file:write ('флаг: ' .. trigger.misc.getUserFlag('1')); -- задать

_file:write ('флаг: ' .. trigger.misc.getUserFlag('1')); -- записать

_file:close(); -- закрыть

 

P.S. - Бандит подсказал... При этом сразу сказал что, мало чем данная фича будет полезна. после чего чёт исчез... Оказался -прав ))

 

От себя добавлю - если хочешь что-то выносить - выноси в логи DCS - они по умолчанию открыты на запись из DCS!

Печально, что исчез. В этом коде файл без пути где сохранен? Лог конечно дело хорошее, но как потом из него переменную достать?

Link to comment
Share on other sites

StarLey_Andrew, это вы над чем работаете, если не секрет?

Перенос данных из миссии в миссию?

ASRock P67 Extreme4 Gen3/Intel Core i5 3570/16 Gb DDR3/GF 560Ti/Win7 64bit/CH FighterStick + CH Pro Throttle + Saitek Pro Flight Rudder Pedals/TrackiR4 Pro

Link to comment
Share on other sites

Старлей - смотри, если ты что-то будешь писать для онлайна - это не будет работать у клиентов - у них просто вылазить ошибка будет (запись то у них закрыта), то есть это максимум для локального тестирования может пригодится. Вот про что я говорил. А если надо потестить кое что - файл без пути сохраняется кажется в bin игры, точнее не помню - это было полтора года назад.

А путь надо самому указывать где писать файл - хоть на рабочий стол!

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

Данная возможность как раз в онлайне и подсмотрена. На 373 сервере.

Там, так понимаю, данные миссии (ее результаты) сохраняются в файл, а после перезагрузки - восстанавливаются, чтобы не терять достижений. Например, кто, какой аэродром занял.

Link to comment
Share on other sites

Данная возможность как раз в онлайне и подсмотрена. На 373 сервере.

Там, так понимаю, данные миссии (ее результаты) сохраняются в файл, а после перезагрузки - восстанавливаются, чтобы не терять достижений. Например, кто, какой аэродром занял.

 

 

Согласен - вполне можно перегонять данные... НО, как говориться всегда есть НО!

 

Сначала вопрос:

Стало интересно как вы подсмотрели - прямо на сервере в папку с игрой заглянуть смогли ??? Но еще более прикольный вопрос - вы там за одно не видели каким именно способом восстанавливаются? )))

 

Теперь тоненький намек:

1) Под словом "восстанавливаются" - кроется программа, написанная не в ED.

2) На самом деле дико много кода надо самому писать! И это программа работает ТОЛЬКО на сервере!

3) У клиентов работает ТОЛЬКО DCS World+модули - они вообще не неприкасаемы.

4) SSE у клиентов не работает.

 

Старлей всегда печатал программы для SSE, но стал догонять что перегонять данные по миссиям нельзя только с помощью скриптов миссий. Скоро дойдет, что и внешние файлы (например куда сливали результат) из работающей миссии, читать тоже нельзя. Хотя скорее можно, но для онлайна не приемлемо.

Просто намекнул что юзать DCS/Skripts/MissionScripting.lua для онлайна - не правильный путь. см.пункт 3.

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

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

Потом извлек его оттуда. Все. Что еще нужно?

А для онлайна. Разве есть необходимость править файл (MissionScripting.lua) всем клиентам ? Если сначала грузится миссия (а значит подгружаются сохраненным данные), а потом к миссии цепляются игроки?

Link to comment
Share on other sites

Вообщем, я вобще пока вижу такой костыль, пока нет нормальных средств выгрузкизагрузки данных. Внешний следящий модуль на стороне сервера, который обрабатывает или логи или еще чего (с кфг). Далее - парсим вставляем в нужную заготовку и запускаем далее. Т.к. у нас есть параллельность, то делается специальная "ноль" миссия, которая дает возможность засунуть в нужную миссиию нужные значения флагов, за одно и погоду, если делать интересно, далее по кругу.. Либо дописывается кусок для сервмана, что бы он блочил принудительную перезагрузку миссии, когда идет подсчет и подготовка новой миссии и т.п. Т.е. получаем некое подобие продвинутого дидикейта с возможностью изготовления нормальных побоищь с бегающей границей и т.д.


Edited by edwardpashkov
  • Like 1

[sIGPIC][/sIGPIC]

АКА =TMS= Count _ Полеты на = T M S = dedicate server На точке работает РП (РП+РПП)

Набор вирпилов на вертикальную, штурмовую и истребительную авиацию со времен ВОВ и по настоящее время

Комсостав и инструкторы - летавшие в горячих точках (и не только) и действующие летчики.

Link to comment
Share on other sites

Бинго! edwardpashkov сразу всё вкурил ))) именно так всё и работает у нас! Погода генирируется в летабельных пределах следящим модулем и бла-бла-бла. Причем всё это происходит "на лету". есть конешно небольшие отличия, но в целом описал как надо. Только осталось всю эту хрень реализовать...

 

 

PS. для edwardpashkov - забыл про блокировку добавить, у нас ее нет, работает принцип "успеть за 60 секунд" ))


Edited by diyk

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

Когда были деревья большими... о слияния ДКС в одну кучу ходили легенды, когда Ка50 был сам по себе... Наработки стали придумываться, вплоть до управления ЛА через модуль, т.е. реальная блокировка вылета, если ты косячишь, даже уже был опробован сервер/клиент блок, но случилось так, как случилось и стало не до модуля, главный летописец стал папой, мудреца завалили по работе, а дружина стала активно тренироваться временно на другом :). Хотя много чего расписано было весового для полноценной войнушки.


Edited by edwardpashkov

[sIGPIC][/sIGPIC]

АКА =TMS= Count _ Полеты на = T M S = dedicate server На точке работает РП (РП+РПП)

Набор вирпилов на вертикальную, штурмовую и истребительную авиацию со времен ВОВ и по настоящее время

Комсостав и инструкторы - летавшие в горячих точках (и не только) и действующие летчики.

Link to comment
Share on other sites

Т.е., пример данной миссии на серваке не будет работать?

 

После загрузки в меню F10 выбрать синие или красные, перезагружаем миссию и в кабулети будет находится синий или красный юнит. Эт просто для примера.

 

Переде этим в MissionScripting.lua заккоментить строки

 

--[[
local function sanitizeModule(name)
_G[name] = nil
package.loaded[name] = nil
end

do
sanitizeModule('os')
sanitizeModule('io')
sanitizeModule('lfs')
require = nil
loadlib = nil
end
]]

Save.miz

Link to comment
Share on other sites

Когда были деревья большими... .

 

Понятно ))) не довели дело до конца... но главное не остужать моск и всё победить!

 

29 - на серваке если и будет. а у клиента?

 

щас пока на работе, вечером гляну файл.

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

А у клиента разве должна происходить какая-либо запись в файл? Он цепляется к работающей миссии, а там уже все данные загружены, т.е, процесс идет. Я так понимаю.

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

Link to comment
Share on other sites

А у клиента разве должна происходить какая-либо запись в файл? Он цепляется к работающей миссии, а там уже все данные загружены, т.е, процесс идет. Я так понимаю.

 

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

 

а у тебя в миссии заложена загрузка файла, которого нет у клиента... стоп-кран ?

а не дай бог сервер передаст деактивацию отработанных флагов, которые клиент не скачал?

 

Было дело насмотрелся на эти "ошибки в ошибках" - больше не хочется ))

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

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

Ну вот в моем примере: в зависимости от данных в загружаемом файле, на аэродроме появляется синий или красный юнит. Клиент цепляется, загружает миссию и сервер ему передает кто где есть (т.е., допустим красный юнит на аэродроме). Не так?

Или значения флагов сервер какие передает? Те, что в текущий момент?

 

а у тебя в миссии заложена загрузка файла, которого нет у клиента... стоп-кран ?

Разве? Нет, да нет файла. При работе скрипт проверит его наличие. Если нет - данные не загрузит.

Link to comment
Share on other sites

При подключении клиента передается исходная миссия и так и так происходи синхронизация данных (но, иногда не всегда корректно, но обычно штатно), задача вообщето вставить в нужную по развитию сюжета миссию нужное состояние ТВД в паузе между выгрузкой старой и загрузкой нового.. Так что все может происходить на стороне сервера не трогая клиентскую часть, одно но - костыль внешний это, т.к. вообще кусок где выгрузка и загрузка флагов и складов хранится должна передаваться с миссие и клиенту, будет такое ЕД делать или нет (и увидим ли дидикейт и при этой жизни(?)- другой вопрос... А так - внешний парсер... Внешне через лог отследить, что в заготовку пора влить данные следующего этапа - чисто техническа задача, как раз будет время притормозить сервак, влить данные, и запустить следущую миссию.. Правда геморно все это, но все зависит от числа складов, передачи нужной инфы и т.д. Флагами можно блочить или рарешать работу груп войск и т.д и т.п. Так что на одной заготовке овновной остается только сделать дислокацию по этапам в зависимости от развития событий и на загрузку совать нужный файл (после перепаковки миссии). Совать достаточно 2 кольцевых файла - текущий и следующий :) и кучу ветвления.


Edited by edwardpashkov

[sIGPIC][/sIGPIC]

АКА =TMS= Count _ Полеты на = T M S = dedicate server На точке работает РП (РП+РПП)

Набор вирпилов на вертикальную, штурмовую и истребительную авиацию со времен ВОВ и по настоящее время

Комсостав и инструкторы - летавшие в горячих точках (и не только) и действующие летчики.

Link to comment
Share on other sites

Ну в принципе всё верно Пашков успел отписать, от себя добавлю про гемор - это на столько геморно, что никакой психики не хватит. Поэтому и начал именно с внешней проги, так как в будущем в неё безболезнено можно запихнуть что нить. Вобщем некий запас появится.

 

ED очень просит перезагружать игру после каждой миссии, как на сервере, так и на клиенте - вот здесь и можно этим воспользоваться для работы модуля переноса/создания новой миссии. 30 секунд - вполне хватает!

сам модуль может следить не только за DCS, но и вообще за всем сервером сразу... и когда всё это доведется до ума - админ уже не будет так нужен серверу. то есть сервер-беспилотник получится )) Можно даже на работу сходить или погулять... - при появлении DCS Мира уже обсуждали.

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

StarLey_Andrew, это вы над чем работаете, если не секрет?

Перенос данных из миссии в миссию?

Да, вопрос был именно в этом, но судя по предыдущим постам не смотря на то, что удалось добиться определенных успехов, оказалось это только упражнение для мозга (интересовала возможность исполнения именно средствами SSE).

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

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

В приложенной миссии хулиганский файл десанта для вертушек. Так добавлено подразделение "инженеров". Если погрузить его на борт и высадить рядом с грузом (возможно и самостоятельно принесенным) с указанием в имени груза типа строения (см.таблицу _static_type на 203-209 стр.) и как указано в примере через 15 минут после высадки инженеры возведут строение.

Чего не удалось добиться:

-в 255 строке не понял как удалить груз (инструкция :destroy()), подозреваю, что неправильно беру группу по имени или удаляю совсем не группу;

-в 248 строке присваиваю "Heading" первого юнита инженеров, потому, что heading груза в простейшем виде выдает какое-то другое направление оО;

-уже не впервые не смог создать через coalitions.addGrouop группу мин. стр.258-311. До этого пытался просто создать их добавив группу мин в десант, не вышло. Здесь аналогично. Все создается все из Group.Category.GROUND кроме мин, в чем именно их особенность? В этот раз в качестве data группы использовал архитектуру напрямую взятую из миссии с созданной миной (если обратите внимание, то у мины есть еще доп.свойство "shape_name"). В общем имейте в виду, что локальная переменная _new_static_data по сути взята из файла миссии. А очень досадно не получилось, если бы вышло, то при наличии инженеров вместо груза появилось бы минное поле. Про просто "высадку" мин в виде десанта я вообще молчу.

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

P.S. работу функции createStatic() проверял назначив ее выполнение рядом стоящей наземной группе через mission.model.group['Имя группы']:createStatic(); в виду отсутствия возможности проверки ее работоспособности на вертушке.

v5.5_auto_heli_place_init_engineer.miz

Link to comment
Share on other sites

  • 2 weeks later...
Подскажите пожалуйста как заставить с-300 сбивать?

 

Поставить не только пусковую установку (а они тоже есть ведущие и ведомые), но и станции подсветки цели и радары. Подробнее о составе батареи смотри в энциклопедии (той, что в редакторе миссий).

Link to comment
Share on other sites

Подскажите пожалуйста как заставить с-300 сбивать?

 

Как вариант, в редакторе миссий есть меню "Шаблоны". Там уже есть готовые к установке и стрельбе системы С-300 и Патриот, со всеми ПУ, радарами и прочим.

Link to comment
Share on other sites

Подскажите картоделы, а как из миссии скрипт посмотреть? В Тригерах прописан Скрипт инициализации, а где он лежит то, только имя файла и все?

AMD 7700X, RTX 4080, DDR5 2x16GB 6200MHz, SSD GIGABYTE AORUS 2TB, HP Reverb G2r1

Link to comment
Share on other sites

Подскажите картоделы, а как из миссии скрипт посмотреть? В Тригерах прописан Скрипт инициализации, а где он лежит то, только имя файла и все?

В папке ...мои документы /сохранение игры/DCS/missions файл миссии с расширением .miz открыть архиватором (например WinRar). Там внутри файлы, которые можно открыть редактором notepad-plus-plus.org. Кодировка UTF8 без BOM. Синтаксис Lua

Link to comment
Share on other sites

  • Recently Browsing   0 members

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