Jump to content

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


Recommended Posts

BAntDit - реально нарисовать такой скрипт:

 

логика

1) кончился (погиб последний) самолёт на дроме (например СУ-25Т) - сообщение что таких-то самолётов больше нету, ждите поставок.

2) доставка самолёта/ов (со склада) - вывести сообщение о наличии самолёта на дроме

 

и всё это привязанно к каждому аэродрому??


Edited by diyk

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

  • Replies 543
  • Created
  • Last Reply

Top Posters In This Topic

BAntDit - реально нарисовать такой скрипт:

 

логика

1) кончился (погиб последний) самолёт на дроме (например СУ-25Т) - сообщение что таких-то самолётов больше нету, ждите поставок.

2) доставка самолёта/ов (со склада) - вывести сообщение о наличии самолёта на дроме

 

и всё это привязанно к каждому аэродрому??

 

Проблематично, но можно.

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

Но можно реализовать свою логику скриптами отдельно для каждого аэродрома и типа самолета. Я уже это делал и проблема была следующая: как ограничить занятие ЛА, если количество для данного типа ЛА = 0? - т.е. реализовать можно, но это будет работать кривовато. Появятся новые возможности в новых версиях, тогда посмотрим.

Крайняя версия 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

Link to comment
Share on other sites

Приветствую,

 

Я тут для своих нужд некоторые фичи для артиллерии реализовывал, получилось довольно прикольно,

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

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

 

Для начала перечисляю фичи, которые реализовал:

 

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

самостоятельно выбирать цель для атаки и обстреливать её.

 

2. Реализовал собственно и самого Artillery Observer (арт наводчик)

- роль арт наводчика можете назначить для любого наземного юнита или ЛА под управлением AI

(на использование ЛА под управлением игрока пока не расcчитано).

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

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

 

3. Реализовал возможность артиллерии дать залп дымовыми снарядами по обнаруженной группе.

 

4. В зависимости от передвижений противника арт. наводчики или обнаруживают группы,

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

но тот уже сообщил о ней, то артиллерия будет работать по месту,

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

 

5. Реализовал возможность добавить артиллерии фиксированный список целей, тогда

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

и если они ещё живые :)

 

Скрипты реализовал максимально универсально, работают на любых юнитах из

раздела Artillery. Я тестировал на Мста, Паладинах и Минометах, в качестве

наводчиков пробовал использовать БПЛА, брдм-2 и Ми-8. Все работало отлично.

 

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

Как пользоваться:

(я тут прикрепил к посту пример миссии, описание сделаю по нему, чтобы было понятней).

 

1. Нужно скачать скрипт msf.lua (прикрепил к посту, скачивайте самую последнюю - крайнюю версию MSF) - скрипт здоровый, так как содержит все мои наработки, так чтобы их можно было перенести в любую миссию

( в том числе и то, что начал делать по ПВО, и никак не получается закончить :) )

 

 

2. Скрипт нужно подключить к миссии, через триггер MISSION START (СТАРТ МИССИИ). Вот так:

Downloader.ashx?fileId=113&openatonce=true

 

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

 

В моем примере это группа - artillery (имя группы в редакторе).

 

 

4. Далее вам нужно определиться, кого вы хотите сделать наводчиками.

В моем примере это беспилотник - air_artillery_observer_1 (имя юнита в редакторе)

И HMMWV c пулеметом - artillery_observer_10 - это один из юнитов группы artillery,

видит он гораздо меньше БПЛА, но лишняя пара глаз не помешает.

 

5. Нужно написать init-скрипт. В моем примере он такой

(читайте комментарии и все будет понятно):

В вашей миссии, он будет свои, если у вас будут другие имена групп артиллерии

и наводчиков артиллерии.

 

init.lua:

-- добавление групп управляемых через MSF
-- добавляем группу артиллерии: 
mission.model:addGroup('artillery');

-- беспилотник:
mission.model:addGroup('air_artillery_observer');

-- добавление юнитов управляемых через MSF
-- наводчики: 
mission.model:addUnit('artillery_observer_10');
mission.model:addUnit('air_artillery_observer_1');

-- запуск MSF:
mission.controller:start(); 

-- список целей для артиллерии
-- я оставляю его пустым, так как цели будут добавляться автоматически от БПЛА, и наземного наводчика,
-- но при желании можно предопределить список целей вручную
local _artillery_targets_list = {};


-- назначение наводчиков: 
mission.model.groups.artillery:addArtilleryObserver(mission.model.units.artillery_observer_10, 5000); -- назменый наводчик будет видеть на 5 км
mission.model.groups.artillery:addArtilleryObserver(mission.model.units.air_artillery_observer_1, 25000); -- БПЛА будет отыскивать их на 25 км 

-- запрос артилерии: 
mission.model.groups.artillery:requestArtilleryOnTargets(_artillery_targets_list, -- список целей (пустой)
{ maximalDistance = 28000 	-- метры: максимальная дальность стрельбы 
, minimal = 250				-- метры: минимальный разброс при лучшем прицеливании (т.е. снаряды будут падать в радиусе 0-250 от точки прицеливания)  
, maximal = 1250 },  		-- метры: случайный разброс (реализованы случайные косяки прицеливания, можно присвоить 0).
200,						-- секунды: время работы по одной группе целей (время между перенацеливаниями), не рекомендую ставить меньше 3 минут
							-- иначе артилерия не успевает наводится
20,							-- секунды: начальная задержка, время от старта комманды до начала прицеливания
true);						-- первые два снаряда дымовые (первый залп дымовыми, для маркировки целей дальше работа ОФС) (ставте false, если
							-- не нужны дымы).

 

Скрипт лучше запустить с первой или второй секунды миссии, через триггер 1 ONCE (ОДИН РАЗ)

 

Downloader.ashx?fileId=114&openatonce=true

 

 

6. С определенной периодичностью или при определенных условиях обновлять список целей:

mission.model.groups.artillery:requestTargetsForArtillery(); -- запрос у наводчиков

 

Лучше сделать это как это сделано у меня - запрос целей при подготовке к стрельбе

(обработчиком события onPrepareToShot - см. пример ниже.)

 

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

на события, которые возникают в процессе работы артиллерии и назначить обработчики этих событий.

 

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

 

В моем примере подписка сделана на следующие события:

(в комментариях все написано).

 

artillery.lua

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

-- методы-обработчики:
-- обработка события готовности наведения на цель:
function artillery_onReadyToShot_EventHandler(sender, eventArgs)

local _report = 'Цель: ' .. eventArgs.target:getName() .. '\n\r';

_report = _report .. 'Угломер: ' .. eventArgs.protractor.ext .. ' - ' .. eventArgs.protractor.int .. '\n\r';
_report = _report .. 'Дальность: ' .. eventArgs.distance .. '\n\r';
_report = _report .. 'Два снаряда дымовыми, огонь! - дальше подкорректирую.';

mission.model.messages.push(_report);
end;

-- обработка события получения данных о целях:
-- собсно самый полезный обработчик - я тут цели запрашиваю
function artillery_onPrepareToShot_EventHandler(sender, eventArgs)

local _count_targets = sender:requestTargetsForArtillery();

if _count_targets > 0 then 
	mission.model.messages.push('Цели получены. Батарее открыть огонь.');
else
	mission.model.messages.push('Цели не обнаружены.');
end
end;

-- обработка события обнаружения цели: 
function artillery_observer_onEnemySpotted_EventHandler(sender, eventArgs)
local _report = sender:getUnitName() .. ' на связи: \n\r';

local _dcsw_target_group = eventArgs.group:getDCSWorldGroup();
local _target_units = _dcsw_target_group:getUnits();

if eventArgs.isNew then 
	_report = _report .. 'обнаружена новая группа целей: ' .. _dcsw_target_group:getName() .. '.';
else
	_report = _report .. 'наблюдаю группу целей: ' .. _dcsw_target_group:getName() .. '.';
end

_report = _report .. ' Число единиц: ' .. #_target_units;

mission.model.messages.push(_report);
end;

-- обработка события потери визуального контакта с целью:
function artillery_observer_onLostVisualContact_EventHandler(sender, eventArgs)
local _report = sender:getUnitName() .. ' на связи: \n\r';
local _dcsw_target_group = eventArgs.group:getDCSWorldGroup();
local _report = _report .. 'цель: ' .. _dcsw_target_group:getName() .. ' вне зоны видимости.';

mission.model.messages.push(_report);
end;

-- подписываемся на нужные события:
-- артиллерию подписываем на события подготовки к стрельбе и готовности к стрельбе:
mission.model.groups.artillery:addOnReadyToShot(artillery_onReadyToShot_EventHandler);
mission.model.groups.artillery:addOnPrepareToShot(artillery_onPrepareToShot_EventHandler);

-- наводчиков подписываем на события обнаружения цели и потери визуального контакта с целью:
mission.model.units.artillery_observer_10:addOnEnemySpotted(artillery_observer_onEnemySpotted_EventHandler);
mission.model.units.air_artillery_observer_1:addOnEnemySpotted(artillery_observer_onEnemySpotted_EventHandler);
mission.model.units.air_artillery_observer_1:addOnLostVisualContact(artillery_observer_onLostVisualContact_EventHandler);

-- для наземного наводчика убрал подписку на событие потери цели, ато он постоянно будет орать, что ничего не видит )))
-- если хотите можете убрать комментарий с последней строчки (радиус обзора ему тогда побольше стоит поставить)
-- mission.model.units.artillery_observer_10:addOnLostVisualContact(artillery_observer_onLostVisualContact_EventHandler);

 

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

 

Downloader.ashx?fileId=115&openatonce=true

 

Известные недочеты сейчас такие:

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

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

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

корректироваться по определенному на тот момент направлению движения - это должно быть круто).

 

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

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

 

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

Вот собсно все. Миссия-прикреплена к посту.

Если что-то не понятно, как использовать эти возможности в ваших миссиях спрашивайте.

artillery_demo.miz


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

Link to comment
Share on other sites

  • 3 weeks later...

Собсно, по просьбам трудящихся.

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

 

Чтобы показать динамическое задание маршрута накидал маленький

пример BTR Racing :) - в миссии в вашем распоряжении БТР-80, а группа противника

Yankee Patrol будет автоматически определять ваше место положение и динамически строить маршрут так, чтобы добраться до вас.

 

Получилось забавно :) - лучше не стоять на месте, а то догонят и наваляют )))

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

на месте стоять не придется )

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

 

В миссии используется SSE 1.2.3 + MSF.

 

В данной миссии для задания движения (преследования) использовал следующий скрипт:

 

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


-- добавление групп управляемых, через MSF: 
mission.model:addGroup('yankee_patrol');

-- добавление юнитов, управляемых через MSF:
mission.model:addUnit('player_vehicle_1');

-------------------------------------------------
-- старт MSF
mission.controller:start();

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

-- обработчик события прибытия в точку:
-- (примечание: обработчик не сработает, если в процессе движения к одной точке,
-- была получена задача выдвигаться к другой. По сути он сработает, когда задача перестанет выполнятся, т.е. 
-- когда БТР догонят и завалят)
function onMoveOnEventHandler(sender, eventArgs)
mission.model.messages.push('Группа ' .. eventArgs.movingGroup:getGroupName() .. ' выдвигается к точке ' .. sender:getName());
end;

-- обработчик события начала движения к новой точке:
function onReachEventHandler(sender, eventArgs)
mission.model.messages.push('Группа ' .. eventArgs.arrivedGroup:getGroupName() .. ' достигла точки ' .. sender:getName());
end;


-- функция постановки задачи движения к объекту, переданному в аргументе: 
local function _moveToBtrTask(_btr)
-- проверка жив ли БТР:
if not _btr:isAlive() then 
	mission.model.messages.push('На связи группа ' .. mission.model.groups.yankee_patrol:getGroupName() 
		.. '. Преследуемая группа уничтожена');
	return nil; -- завершение преследования, если не жив
end

mission.model.groups.yankee_patrol:removeFirstWayPoint(); -- чтобы не плодить waypoint-ы

local _status, _result = pcall(function()
	
	mission.model.messages.push('На связи группа ' .. mission.model.groups.yankee_patrol:getGroupName() .. ' ведем преследование.');
	
	local _new_wp_status, _new_waypoint = mission.model.groups.yankee_patrol:moveToObject(
		_btr:getDCSWorldUnit() 		-- двигаться к БТР-у (объект, которому нужно двигаться)
		, 12  						-- со скоростью 12 м/c
		, 'Off Road'				-- двигаться вне дороги
		, onReachEventHandler  		-- onReachEventHandler - выполнить по прибытии
		, onMoveOnEventHandler		-- onMoveOnEventHandler - выполнить в начале движения
	);
	
	if not _new_wp_status then 
		return true;
	end
	return false;
end);

if _result then 
	-- если преследование закончено: 
	return nil; -- перестаем перенаводить группу
end

if not _status then 
	-- если что-то пошло не так: 
	if _result then 
		mission.model.messages.push('_moveToBtrTask error: ' .. _result);
		env.error('_moveToBtrTask error: ' .. _result, false);
	else
		mission.model.messages.push('_moveToBtrTask error: что-то сломалось... ');
		env.error('_moveToBtrTask error: что-то сломалось... ', false);
	end
	return nil; -- завершить задачу
end

-- если преследование продолжается:
return timer.getTime() + 10; -- перенавести группу на новую точку через 10 сек. 
end;

-- добавляем задачу преследования: 
mission.model.groups.yankee_patrol:addTask('racing' 	-- имя задачи
, _moveToBtrTask									-- собсно сама задача (функция ставящая задачу)
, mission.model.units.player_vehicle_1				-- аргумент (юнит-цель преследования)
, timer.getTime() + 5);								-- запуск через 5 сек. c момента выполнения этого скрипта

 

К посту прикрепил миссию и msf.lua

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

 

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

 

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

btr_racing.miz


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

Link to comment
Share on other sites

А можно ли таким скриптом реализовать например подьезд соответствующей техники при дозаправке или перезарядке на аэродроме?

 

 

Не могу точно сказать - это нужно завязываться на события S_EVENT_REFUELING и S_EVENT_REFUELING_STOP скорее всего, но я на память не помню - они срабатывают тока при дозаправке в воздухе или на земле тоже... нужно проверять, вообщем.

------

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


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

Link to comment
Share on other sites

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

[sIGPIC][/sIGPIC]

http://action-games.at.ua

Link to comment
Share on other sites

Сейчас проверил - не получилось :(

События S_EVENT_REFUELING и S_EVENT_REFUELING_STOP - только для дозаправки в воздухе.

Подогнать к самолету технику я вообщем то могу без проблем, но без нужных событий я не могу определить в какой момент её подогнать,а в какой момент она должна отъехать... - т.е.

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

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

 

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


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

Link to comment
Share on other sites

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

 

Нет, такой возможности нет. По крайне мере с помощью SSE, по крайней мере сейчас.

Крайняя версия 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

Link to comment
Share on other sites

Доработал скрипт подсчета потерь:

 

1. Сделал, чтобы в одном скрипте велся подсчет ЛА, пилотов и наземки (танков, пехоты, БМП-шек).

 

2. Чтобы сообщения не были громоздкими, сделал чтобы информация по наземке выводилась отдельным сообщением.

 

3. Раньше информация выводилась, если разбивался ЛА или погибал пилот (вызывалась функция showCasualties тригеерами) - сейчас не надо никаких триггеров, нужно просто один раз запустить скрипт. Информация сейчас

выводится автоматически раз в 5 мин., сначала выводится по ЛА, потом по наземке.

counter_casualty4.lua

counter_casualty4.miz

Screen_130425_224802.thumb.jpg.22f3aa9782a5abe3f7f0e9d542066c89.jpg

  • 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

Link to comment
Share on other sites

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

 

 

а если скорость ноль и борт жив подогнать технику, не важно зачем... да хоть газировки пилоту дать))?? а там и подвесы и заправки...

Intel Core 2600K, GTX970_4gb, 12gb_1600MHz, W10x64

Link to comment
Share on other sites

а если скорость ноль и борт жив подогнать технику, не важно зачем... да хоть газировки пилоту дать))?? а там и подвесы и заправки...

 

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

Крайняя версия 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

Link to comment
Share on other sites

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

 

Готово:

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

I translated script for counting casualties of aircrafts, vehicles and infantry.

 

My english is not well enough, and may be i did some mistakes in translation.

I would be appreciated if somebody can correct my translation.

 

Script and sample mission attached to post below.

 

To use script in your missions, you need to use trigger "MISSION START"

and action "DO SCRIPT FILE" (screenshot below).

screen_1.thumb.png.4ba3e22991d4d198c31c5a83ea286b9c.png

counter_casualty.lua

counter_casualty.miz

Screen_130428_122048.thumb.jpg.1db83ad6412a9f59b51a8844e690ae8f.jpg


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

Link to comment
Share on other sites

Бандит подскажи пожалуйста как сделать проверку "группа разбита" скриптом?

Что бы можно было в расширенных действиях ППМ, в виде условия окончания ожидания, например, в поле скрипт прописать. Что-то типа - группа такая-то разбита = true.

Да и вообще неплохо было бы какие-то примеры скриптов простых проверок, которые уже есть в самих триггерах.

 

Группа разбита

Один из группы поврежден

текст группе

и т.д.

 

На таких примерах легче учится, да и применить сразу можно.

[sIGPIC][/sIGPIC]

http://action-games.at.ua

Link to comment
Share on other sites

Бандит подскажи пожалуйста как сделать проверку "группа разбита" скриптом?

Что бы можно было в расширенных действиях ППМ, в виде условия окончания ожидания, например, в поле скрипт прописать. Что-то типа - группа такая-то разбита = true.

Да и вообще неплохо было бы какие-то примеры скриптов простых проверок, которые уже есть в самих триггерах.

 

Группа разбита

Один из группы поврежден

текст группе

и т.д.

 

На таких примерах легче учится, да и применить сразу можно.

 

ok, я выложу примеру чуть позжее...

ато седне меня на работе закидали задачами...

Крайняя версия 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

Link to comment
Share on other sites

Примеры, которые обещал:

 

 

Группа разбита

Один из группы поврежден

текст группе

 

1) Для примера будем считать, что в миссии у нас есть группа бронетехники с именем: yankee. Условия разбита ли группа, есть ли в ней поврежденные юниты будут проверять по этой группе.

 

2) Для примера также возьмем группу танков с именем panzer_1 - для этой группы в расширенных действиях ППМ поставим условие - не двигаться дальше, пока группа yankee не разбита.

 

3) И для примера возьмем группу танков с именем panzer_2 - для этой группы в расширенных действиях ППМ поставим условие - не двигаться дальше, пока в группе

yankee не появятся уничтоженные или поврежденные юниты.

 

Пример №1:

Группа разбита

в виде условия окончания ожидания

 

По поводу условий окончания ожидания сразу скажу: в версии 1.2.4. Stop Conditions (условия завершения) заданные через Lua выражения не работают.

 

Но беды в этой никакой нет, вместо того, чтобы использовать Stop Conditions возможно

использовать timer.scheduleFunction (см. тут http://en.wiki.eagle.ru/wiki/Drafts/Simulator_Scripting_Engine_(1.2.4)/Part_1#timer), более того scheduleFunction гораздо эффективнее

по производительности, чем Stop Conditions.

 

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

 

local _panzer = Group.getByName('panzer_1'); 
local _controller = _panzer:getController();

-- для группы panzer_1 добавляем задачу стоять:
_controller:pushTask({ id = 'Hold', params = {} });

-- и тут же добавляем scheduleFunction с проверкой, когда 
-- можно выдвигаться дальше (в данном случае проверяем, 
не уничтожена ли группа _yankee):

timer.scheduleFunction(function(_argument)
local _yankee = Group.getByName('yankee'); -- получаем группу yankee по имени

if _yankee and _yankee:isExist() then  -- проверяем существует ли такая группа
-- если существует, получаем кол-во юнитов в группе в данный момент. 
local _yankee_units = _yankee:getUnits();  

if #_yankee_units > 0 then 
-- если в данный момент число юнитов > 0, то повторим проверку через 2 сек.
return (timer.getTime() + 2); 
end
end

-- если группа не существует или число юнитов в ней 0, то:
trigger.action.outText('Panzer 1: выдвигаемся вперед', 10); -- выводим сообщение
_argument.controller:popTask();  -- удаляем задачу, заставляющую группу стоять
return nill;  -- больше не выполняем проверки.
end, { controller = _controller}, timer.getTime() + 2);

 

Данный скрипт нужно разместить в расширенных действиях нужного вам ППМ,

используя Prefom Command - Run Script:

 

attachment.php?attachmentid=80528&d=1367500155

 

(примечание: для объяснения принципа работы я написал комментарии в скрипте, в редакторе же при размещении скрипта внутри команды RunScrit однострочные комментарии использовать нельзя!)

 

Пример №2:

Один из группы поврежден

 

Тут принцип точно такой же, только проверка иная, сразу привожу пример скрипта:

local _panzer = Group.getByName('panzer_2');
local _controller = _panzer:getController();

_controller:pushTask({ id = 'Hold', params = {} }); -- задача для panzer_2 остановится.

-- scheduleFunction выполняющая проверку, когда panzer_2 может продолжить 
-- движение
timer.scheduleFunction(function(_argument)
local _yankee = Group.getByName('yankee'); -- получить группу yankee по имени

if _yankee and _yankee:isExist() then  -- проверить существует ли эта группа
local _yankee_units = _yankee:getUnits(); -- получить тек. юниты
local _yankee_size = _yankee:getSize();  -- получить стартовое число юнитов

-- сравниваем тек. число юнитов со стартовым числом
if #_yankee_units == _yankee_size then  
 -- если число юнитов прежнее, проверяем нет ли среди них поврежденных
 local _has_dammage = false;
 for _i = 1, #_yankee_units do
 -- у каждого юнита сравниваем стартовый Life Bar c текущим:
  if _yankee_units[_i]:getLife() < _yankee_units[_i]:getLife0()    then  _has_dammage = true; break; end
 end
 -- если все проверки пройдены, т.е. если число юнитов = стартовому
 -- и никто из юнитов не покоцан, то повторим проверку через 2 сек.
 if not _has_dammage then return (timer.getTime() + 2); end
end
end

-- если какая-то из проверок не прошла, значит кого-то замочили 
-- или покоцали: 
trigger.action.outText('Panzer 2: выдвигаемся вперед', 10); -- выводим сообщение
_argument.controller:popTask();  -- удаляем задачу ожидания
return nill; -- проверки больше не выполняем. 
end, { controller = _controller}, timer.getTime() + 2);

 

Выполнить скрипт в нужной ППМ можно также используя Prefom Command - Run Script.

 

Пример №3:

текст группе

 

Ну тут уж совсем просто.

Допустим отправка сообщения для группы yankee:

 

local _yankee = Group.getByName('yankee'); -- получить объект группы по имени

trigger.action.outTextForGroup(_yankee:getID(), 'Сообщение для группы', 15);

 

Сообщение увидят пользователи, у которых под управлением один из юнитов группы yankee. Сообщение будет видно в течение 15 сек.

 

-----------

Прикрепил миссию-пример к посту. В ней все как и описал выше - группа Pnazer_1 будет ожидать в ППМ №1, пока противник не уничтожит группу yankee, группа Panzer_2 будет ожидать в точке

ППМ №1 пока один из юнитов yankee не получит повреждений.

RunScript_example.thumb.png.7b448f4a66aa76877f2fb442d0d732fa.png

examples.miz


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

Link to comment
Share on other sites

BAntDit, есть возможность отследить уничтожение объекта карты , к примеру моста , (в СЛмод такая есть но уменя он не рабротает.)?

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

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

Link to comment
Share on other sites

BAntDit, есть возможность отследить уничтожение объекта карты , к примеру моста

 

Да, есть. Со scenery objects пока сам мало работал...

Крайняя версия 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

Link to comment
Share on other sites

BAntDit, скрипт по подсчёту ЛА и наземки классный, спасибо тебе за то, что тратишь на нас своё время!

 

У меня такой вопрос или просьба, как сделать, или можешь ли сделать, чтоб сообщение выскакивало раз в 10-15 минут?

Щас он выскакивает как то слишком часто. Это конечно не критично, но если можно... .

Link to comment
Share on other sites

BAntDit, скрипт по подсчёту ЛА и наземки классный, спасибо тебе за то, что тратишь на нас своё время!

 

У меня такой вопрос или просьба, как сделать, или можешь ли сделать, чтоб сообщение выскакивало раз в 10-15 минут?

Щас он выскакивает как то слишком часто. Это конечно не критично, но если можно... .

 

Строка 345.

-- интервал для вывода информации о потерях авиации:

local _show_aircarfts_casualties_timeout = 300; -- 300 сек (5 мин.)

 

-- интервал для вывода информации о потерях наземки:

local _show_vehicle_casualties_timeout = 300; -- 300 сек (5 мин.)

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

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

Link to comment
Share on other sites

Строка 345.

-- интервал для вывода информации о потерях авиации:

local _show_aircarfts_casualties_timeout = 300; -- 300 сек (5 мин.)

 

-- интервал для вывода информации о потерях наземки:

local _show_vehicle_casualties_timeout = 300; -- 300 сек (5 мин.)

 

Да, все правильно - просто увеличьте интервалы :)

 

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

Крайняя версия 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

Link to comment
Share on other sites

  • 2 weeks later...

Приветствую,

закончил разработку механизма перевозки групп юнитов на вертолете UH-1H Huey.

 

Сейчас все работает стабильно и на сервере и на клиенте. Вертолетной эскадрильи RAF огромное спасибо за помощь в тестировании.

 

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

 

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

(смотреть обязательно в HD, иначе, будет не разобрать примеры):

 

Результат:

 

 

Демо-миссия реализованная в видео примере прикреплена к посту.

cargo_moving_example.miz


Edited by BAntDit
  • Like 2

Крайняя версия 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

Link to comment
Share on other sites

  • Recently Browsing   0 members

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