Jump to content

Разработка миссии на основе Simulator Scripting Engine


Recommended Posts

Posted (edited)
...Работать не хочет :(

Зона погрузки не создается.

Спасибо!

Вроде нашел ошибку, в 150, 164 и 176 строке вместо

mission.model:addCargoPlace(_static_units.name, _cargo_place_point, 150, coalition.side[_coalition.name]);

нужно

mission.model:addCargoPlace('Пункт подбора '.._static_units.name, _cargo_place_point, 150, coalition.side[_coalition.name]);

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

Edited by StarLey_Andrew
  • Replies 544
  • Created
  • Last Reply

Top Posters In This Topic

Posted (edited)

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

Для BAntDita, проблемка нарисовалась. Судя по всему при назначении наземным юнитам погрузки в зоне погрузки при создании радиоменю вылетает ошибка.

 

Сделал функцию автоматически добавляющую зону погрузки любому статическому объекту имеющему в названии слово "Погрузка".

Например вы установили статический объект - "вертолетная площадка-Тент" (или саму площадку даже лучше) и назвали ее "Штаб полка (Погрузка)"

И для вертолетов соответствующей коалиции будут доступны погрузки по шаблонам для этой вертушки.

auto_cargo_place_name.lua

Edited by StarLey_Andrew
Posted (edited)

Проверил в офлайне. По вертикальным все работает! Спасибо!

В онлайне с ребятами позже проверю.

Edited by ProfessorRider
Posted
Проверил в офлайне. По вертикальным все работает! Спасибо!

В онлайне с ребятами позже проверю.

Ок, спасибо, буду ждать результатов

Posted
Да, пример есть... вот

 

Зорг. обнови ссылочку. эта не пашет.

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

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

Posted
функцию автоматически добавляющую зону погрузки любому статическому объекту имеющему в названии слово "Погрузка".

Например вы установили статический объект - "вертолетная площадка-Тент" (или саму площадку даже лучше) и назвали ее "Штаб полка (Погрузка)"

 

такая идея

 

Если ты сможешь оперировать именами юнитов, то можно назначать шаболоны по именам , а не по типу.

Те в самой группе из 4х бтр каждый БТР имеет в своем имени "название" которое отвечает за то какой шаблон ему погрузят.

К пимеру

1юнит группы - ru_BTR_11_(МСО)

2юнит группы - ru_BTR_12_(MCO)

3юнит гуппы - ru_BTR_13_(MCO)

4юнит группы - ru_BTR_14_(ПЗРК)

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

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

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

Posted
такая идея

 

Если ты сможешь оперировать именами юнитов, то можно назначать шаболоны по именам , а не по типу.

Те в самой группе из 4х бтр каждый БТР имеет в своем имени "название" которое отвечает за то какой шаблон ему погрузят.

К пимеру

1юнит группы - ru_BTR_11_(МСО)

2юнит группы - ru_BTR_12_(MCO)

3юнит гуппы - ru_BTR_13_(MCO)

4юнит группы - ru_BTR_14_(ПЗРК)

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

Есть такая задумка, пока на реализации, но это должна быть комбинация. По моей задумке если в имени не прописано конкретного шаблона, то погрузка идет по типу. Почему?

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

В общем пока на проработке. Но то, что это не мне одному в голову пришло, подтверждает правильность идеи.

Posted
Есть такая задумка, пока на реализации, но это должна быть комбинация. По моей задумке если в имени не прописано конкретного шаблона, то погрузка идет по типу. Почему?

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

В общем пока на проработке. Но то, что это не мне одному в голову пришло, подтверждает правильность идеи.

 

:):):)

 

Скорее 150 с обеих сторон. и котл ц контрл в никто не отменял.

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

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

Posted

Ну есть еще вариант с выбором способа погрузки установкой значения флага в начале миссии. Ну и 300 от 500 юнитов для миссиодела не сильно отличны по объему работ :)

Posted
Ну есть еще вариант с выбором способа погрузки установкой значения флага в начале миссии. Ну и 300 от 500 юнитов для миссиодела не сильно отличны по объему работ :)

 

нет 150 это скорее всего все юниты для десанта. вполне реализуемо. яже по старой методе 100 прописал. :)

 

С флагом ? поясни.

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

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

Posted
нет 150 это скорее всего все юниты для десанта. вполне реализуемо. яже по старой методе 100 прописал. :)

 

С флагом ? поясни.

Ну вот тут 500 юнитов (из них 2/3 транспортных:)) http://forums.eagle.ru/showpost.php?p=2081730&postcount=2572

По флагам. В файле скрипта могу отловить значение указанного флага. Допустим флаг 500.

Пишем 3 ветки.

Если флага 500 нет или значение флага 500 равно 0, то грузим по именам, а у тех юнитов, у которых в именах нет ключевых слов, грузим по типам;

Если флаг 500 равен 1, то грузим по ключевым словам в имени;

если флаг 500 равен 2, то грузим по типам транспортов.

Тогда в редакторе миссий создаем триггер при старте миссии задать флагу 500 нужное значение и потом подключаем файл.

Если флага нет, а файл подключен то (см. выше)

Это только как универсальный вариант в проработке.

Posted
Зорг. обнови ссылочку. эта не пашет.

 

Работает. на всякий [ATTACH]99814[/ATTACH]

Posted

Скоро накажут, но продублирую сообщение и здесь (или как-то объединять нужно ветки)

... Допустим флаг 500.

Пишем 3 ветки.

Если флага 500 нет или значение флага 500 равно 0, то грузим по именам, а у тех юнитов, у которых в именах нет ключевых слов, грузим по типам;

Если флаг 500 равен 1, то грузим по ключевым словам в имени;

если флаг 500 равен 2, то грузим по типам транспортов.

Тогда в редакторе миссий создаем триггер при старте миссии задать флагу 500 нужное значение и потом подключаем файл.

Если флага нет, а файл подключен то (см. выше)

Это только как универсальный вариант в проработке.

 

В миссии auto_grounde_init_and_on_transport_hit реализовано то, что описано выше, более подробно в описании миссии здесь http://forums.eagle.ru/showpost.php?p=1994117&postcount=1

 

Хотелка:

Надо предусмотреть 2 вида зон

1) нейтральные - зона изначально нейтральная и подсчет ведется как ты пишешь.

2) тыловые зоны очки за удержание начисляются только команде противника.

 

Кста есть скрипт бантдита по зонам но там другой принцип - при вхождении в зону юнита противника зона считается захваченной (нет подсчета кол-ва юнитов). Скрипт нужен -?

 

В миссии zone_at_color плюс к фронтовым реализованы тыловые зоны. Теперь зоны выбираются НЕ по имени, а по ЦВЕТУ (см. рисунок в http://forums.eagle.ru/showpost.php?p=1994117&postcount=1)

Posted

Маленькая миссия и скрипт по реализации динамического танкового завода.

Исправленный вариант ранее выложенный в этом сообщении.

После старта миссии через некоторое время завод начинает производить танки. Создав несколько таков, завод неожиданно взрывается и производство танков прекращается.

Tank_production.lua

tanks.miz

  • Like 1

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

Posted (edited)
Маленькая миссия и скрипт по реализации динамического танкового завода.

Отлично, далеко не лишняя возможность "рожать" группы по запросу (только управляемость наверное всетаки true нужна).

Я думаю с небольшими правками можно использовать в следующем виде:

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

Если чуть пошаманить, то можно сделать так:

- при назначении погрузочной площадки вокруг статического объекта создается триггерная зона;

- процессе игры при наличии в ней транспорта по активации через радиоменю происходит рождение из статического объекта группы десанта по шаблону и ей назначается тип транспорта который ее запрашивает;

- по окончании "рождения" назначить функцию подбора группы (т.е. группа определяет где транспорт и следует к нему (уже реализовано как подбор группы)).

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

Тут еще такой момент. В очередной раз наткнулся на использование флага 101, т.е. если миссиодел просто подключит это файл в свою миссию и потом еще подключит например custom_eject.lua в котором счетчик тоже флаг 101, то у него система с ума сойдет.

Предлагаю создать обновляемое сообщение в котором разработчики скриптов будут "договариваться" об использовании флагов (а по сути глобальных переменных)

Так я например во всех своих скриптах для подсчета очков использую флаги 300-й серии:

- 301 - красных

- 302 - синих

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

Edited by StarLey_Andrew
Posted
...только управляемость наверное все-таки true нужна...

Да. Можно и так. Будет лучше.

Предлагаю создать обновляемое сообщение в котором разработчики скриптов будут "договариваться" об использовании флагов (а по сути глобальных переменных)

Так я например во всех своих скриптах для подсчета очков использую флаги 300-й серии:

- 301 - красных

- 302 - синих

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

Хорошая идея

:thumbup:

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

  • 2 weeks later...
Posted
Сделал функцию автоматически добавляющую зону погрузки любому статическому объекту имеющему в названии слово "Погрузка".

Например вы установили статический объект - "вертолетная площадка-Тент" (или саму площадку даже лучше) и назвали ее "Штаб полка (Погрузка)"

Пробовали вчера в онлайне - вроде работает. Только один нюанс: задали имя "Погрузка" вертолетной площадке, а грузить не захотело. Оказалось проблема в высоте погрузки: 5м (по умолчанию) мало, т.к. площадка приподнята над уровнем земли. Поставили 10м - заработало.

Posted

Всем привет. Предупреждаю - я только учусь (осваиваю возможности стандартного редактора).

Вопрос к профи:

Существует ли принципиальная возможность сделать так:

Есть группа юнитов.

Если флаг a = x

То группа едет по маршруту 1 в точку скажем "альфа".

Если флаг a не равен x то чек флаг b и если b = x

То группа едет по маршруту 2 в точку "бета"

 

Интересует именно принципиальная возможность. Хотя в редакторе может быть только 1 маршрут для группы, но я так понимаю скриптом можно его убирать и назначать новый? Или я что-то путаю?

Posted

ИМХО по флагам

я всегда использую 100е для красных

200е для синих.

Флаги очков 151 и 251.

До сотни флаги вообще лучше не трогать.

В подсчете потерь у меня идут по юнитам 1100е и 1200е по анологии.

 

Старлей попытался к скрипту атаки обьектов сцены подключить подсчет сколько обектов уничтожено . нет подсчета ф301 и 302 всевремя равны 1.

Глянь на досуге.

kill_most.lua

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

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

Posted (edited)
ИМХО по флагам

я всегда использую 100е для красных

200е для синих.

Флаги очков 151 и 251.

До сотни флаги вообще лучше не трогать.

В подсчете потерь у меня идут по юнитам 1100е и 1200е по анологии.

 

Старлей попытался к скрипту атаки обьектов сцены подключить подсчет сколько обектов уничтожено . нет подсчета ф301 и 302 всевремя равны 1.

Глянь на досуге.

в 58 и 62 строке вместо

trigger.action.setUserFlag (302, (302) + 1);

нужно

trigger.action.setUserFlag (302, [b]trigger.misc.getUserFlag[/b](302) + 1);

для 301-го флага аналогично. А то получилось, что 302 флагу присвоить значение (302)+1, вот система понять и не может , что это за 302, а нужно флагу 302 присвоить значение флага 302+1.

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

 

2 eekz

Темы про точки подробно освещал BAntDit, здесь http://forums.eagle.ru/showpost.php?p=2022303&postcount=418 , здесь http://forums.eagle.ru/showpost.php?p=2018009&postcount=411, очень подробно расписано поведение групп здесь http://forums.eagle.ru/showpost.php?p=1971278&postcount=330 и ниже, ну и вообще по теме много где.

Edited by StarLey_Andrew
Posted
Всем привет. Предупреждаю - я только учусь (осваиваю возможности стандартного редактора).

Вопрос к профи:

Существует ли принципиальная возможность сделать так:

Есть группа юнитов.

Если флаг a = x

То группа едет по маршруту 1 в точку скажем "альфа".

Если флаг a не равен x то чек флаг b и если b = x

То группа едет по маршруту 2 в точку "бета"

 

Интересует именно принципиальная возможность. Хотя в редакторе может быть только 1 маршрут для группы, но я так понимаю скриптом можно его убирать и назначать новый? Или я что-то путаю?

 

 

Интересует именно принципиальная возможность.

 

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

  • Like 1

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Posted

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

Posted
программно создать триггерную зону

 

1. Программно умеют создаваться только Статические объекты и Группы различных видов юнитов (танчики, самолетеги, кораблики и т.п.). Триггерные зоны программно не создаются.

 

2. Можно программно задать Точку + Радиус, но тогда вместо стандартных триггерных условий, нужно будет написать свои Lua-предикаты.

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

Posted (edited)
1. Программно умеют создаваться только Статические объекты и Группы различных видов юнитов (танчики, самолетеги, кораблики и т.п.). Триггерные зоны программно не создаются.

 

2. Можно программно задать Точку + Радиус, но тогда вместо стандартных триггерных условий, нужно будет написать свои Lua-предикаты.

Не совсем, вот таким образом создал зону

						local _max_zone_ID = 0;
					for _, _zone in ipairs (env.mission.triggers.zones) do -- перебираем все зоны на карте
						local _zone_ID = _zone.zoneId;
						if _max_zone_ID < _zone_ID then _max_zone_ID = _zone_ID; end
					end
					local _new_zone_ID = _max_zone_ID + 1;
					local _new_zone_red = 1;
					local _new_zone_blue = 1;

					if coalition.side[_coalition.name] == coalition.side.RED then 
						_new_zone_red = 1;
						_new_zone_blue = 0;
					end
					if coalition.side[_coalition.name] == coalition.side.BLUE then 
						_new_zone_red = 0;
						_new_zone_blue = 1;
					end
					local _new_zone_name = 'Зона спасения '.._static_units.name
					local _new_zone_color = {_new_zone_red, 1, _new_zone_blue, 0.5};
					mission.controller.sendMessageForAll("R ".._new_zone_color[1].." G ".._new_zone_color[2].." B ".._new_zone_color[3].." A ".._new_zone_color[4]);
					local _new_zone_param = {zoneId = _new_zone_ID, name = _new_zone_name, radius = 150, x = _static_units.x, y = _static_units.y, hidden = false, color = _new_zone_color, point = {x = _static_units.x, y = land.getHeight({ x = _static_units.x, y = _static_units.y }), z = _static_units.y}};
					table.insert (env.mission.triggers.zones, _new_zone_param);

Причем в последствии вот этим кодом проверяю ее наличие

						for _, _zone in ipairs (env.mission.triggers.zones) do
--							local _dcsw_zone = _zone:getDCSWorldTriggerZone();
						trigger.action.signalFlare({x = _zone.x, y = land.getHeight({ x = _zone.x, y = _zone.y }), z = _zone.y}, trigger.flareColor.Red, 0);
						mission.controller.sendMessageForAll("Имя ".._zone.name.." ID ".._zone.zoneId.." x ".._zone.x.." y ".._zone.y); end							
						
					end

и все нормально, но в последствии в дальнейших скриптах не могу выловить point этой зоны (выдает ошибку в последующем скрипте), так вот теперь вопрос, как отдать эту зону под управление SSE?

Миссию приложил

Edited by StarLey_Andrew
Posted (edited)
table.insert (env.mission.triggers.zones, _new_zone_param);

 

1. таблица env.mission должна использоваться только для чтения - по сути в неё загружается все содержимое файла mission из архива миссии. Т.е. все то, что было создано в редакторе миссии. Добавление каких-либо сущностей в эту таблицу не создает их реально в игре.

 

2.

_dcsw_zone = _zone:getDCSWorldTriggerZone();

 

o_0 - что за getDCSWorldTriggerZone(), _zone - это таблица по формату совпадающая с описанием триггерных зон в файле mission, эта таблица не объект, в ней нет никаких методов.

 

По сути _zone это уже _dcsw_zone.

Edited by BAntDit

Крайняя версия MSF 1.0.1 (для 1.2.6.): http://forums.eagle.ru/attachment.php?attachmentid=89817&d=1382379803

 

Новая версия MSF 1.0.2 beta: http://forums.eagle.ru/attachment.php?attachmentid=93422&d=1390584292

 

Миссия для тестирования возможностей MSF 1.0.2: http://forums.eagle.ru/attachment.php?attachmentid=91514&d=1386954362

----

Руководство по MSF (не полная версия для MSF 1.0.2): http://forums.eagle.ru/attachment.php?attachmentid=92959&d=1389558825

  • Recently Browsing   0 members

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