Jump to content

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


Recommended Posts

Posted
А зачем рисовать триггерные зоны?

 

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

  • Replies 544
  • Created
  • Last Reply

Top Posters In This Topic

Posted (edited)

Доброго всем!

Весь рабочий день :) посвятил изучению этой ветки, MSF, и тестовых миссий. Целью изучения было понять принцип работы погрузки/выгрузки наземным транспортом. Занятие сложное при наличии только базовых навыков программирования.

Зачем все это делалось?

Изначально хотел попробовать разные схемы погрузки, объясню почему. Изначально планируется миссия с развернутым применением пехоты. Учитывая, что на данный момент погрузка происходит только группой непосредственно управляемой человеком, решил попробовать сделать погрузку без радиокоманд, т.е. назначил путь группе из планировщика через зону погрузки со скоростью внутри зоны 2-4 км. и на выходе из зоны получил загруженную колонну, БМП с отделением пехоты, грузовики с минометчиками, БТР с пехотой (и одним ПЗРК). Из всего этого получилось только рассадить по типам транспорта типы групп (init.lua). В этом-же файле часть команды ...command=0)... была заменена на ...command=nil)... в ожидании того, что погрузка состоится при входе в зону погрузки. Однако оказалось, что наоборот, эта команда выгружает без запроса радиокоманды как только скорость снизится до 5 км/ч.

Соответственно вопросы:

Можно ли сделать погрузку в транспорт групп согласно файла init.lua без запроса радиоменю?

Можно ли создать колонну с уже погруженной пехотой в начале миссии?

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

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

Кстати обратил внимание, что в MSF размещается вся "логика" и артиллерии, и пехоты и все остальное, уже обсуждаемое здесь. Может имеет смысл разбить файл по функциональным группам?

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

Надеюсь на сообщение обратят внимание гуру.

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

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

Добавилось всего 3 колонны, а миссия приобрела смысл.

Edited by StarLey_Andrew
Исправил миссию, добавил Ми-8
Posted
Весь рабочий день посвятил изучению этой ветки, MSF, и тестовых миссий.

Занятие сложное при наличии только базовых навыков программирования.

 

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

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

Можно ли сделать погрузку в транспорт групп согласно файла init.lua без запроса радиоменю?

 

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

 

Можно ли создать колонну с уже погруженной пехотой в начале миссии?

 

Можно.

What tack what:

 

Погрузка выполняется методом loadCargo(), который автоматически вызывается в погрузочной зоне, никто не мешает вызвать его самостоятельно вручную.

 

1. Допустим есть какой-то БТР и в редакторе он имеет имя btr_1

 

2. Делаем из него msf-объект: mission.model:addUnit('btr_1'); - в ините

 

3. Далее можно грузить груз:

 

-- создаете описание вашего груза: 
local _my_cargo = {
units = _template, -- перечень юнитов задается также, как шаблоны для зон погрузки
unloadTime = 10, -- время на выгрузку в сек.
groupName = 'my_new_group', -- имя вашей будущей группы из десанта
cargoPlace = { point = { x = 0, y = 0, z = 0 }, radius = 1 }, -- просто скопируйте :)
countryId = _country_id, -- ИД любой страны, например, country.id.USA
conditions = {  -- условия высадки 
altitudeLessThen = nil,
speedLessThen = 10,
command = 0 
} 
};

mission.model.units['btr-1']:loadCargo(_my_cargo);

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

 

Может имеет смысл разбить файл по функциональным группам?

 

MSF разбит по "классам" - внутренним сущностям игрового мира msfUnit, msfGroup, msfCargoPlace - и т.д. + глобальная структура mission.model, которая хранит их всех вместе и меняется в соответствии с происходящими в игре процессами.

 

был бы счастлив если бы помимо имеющихся в файле коментариев, были бы коменты по функциям

 

Смотря по каким функциям. Есть же руководство: http://forums.eagle.ru/attachment.php?attachmentid=86369&d=1377020704 - оно хоть и не полное, но большинство "открытых" функций там есть.

  • 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

И ещё не большое объявление ещё:

 

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

 

Приоритет у меня сейчас такой:

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

Просто делаю некоторое внутреннее окультуривание кода.

 

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

Posted (edited)

3. Далее можно грузить груз:

-- создаете описание вашего груза: 
local _my_cargo = {
units = _template, -- перечень юнитов задается также, как шаблоны для зон погрузки
unloadTime = 10, -- время на выгрузку в сек.
groupName = 'my_new_group', -- имя вашей будущей группы из десанта
cargoPlace = { point = { x = 0, y = 0, z = 0 }, radius = 1 }, -- просто скопируйте :)
countryId = _country_id, -- ИД любой страны, например, country.id.USA
conditions = {  -- условия высадки 
altitudeLessThen = nil,
speedLessThen = 10,
command = 0 
} 
};
mission.model.units['btr-1']:loadCargo(_my_cargo);

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

Сделал все как написано для колонны Грузии. Единственный момент где ДКС "ругнулся" - countryID. Воспринимать country.id.Georgia он отказался, пришлось залезть в файл mission и оттуда выдернуть ID Грузии = 16.

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

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

-если колонна атакована, скорость ниже 20 то command=nil и происходит выгрухка пехоты за 6 секунд;

-в нормальных условиях при скорости ниже 10 command=0 и выгрузка происходит только по команде радиоменю за 10 секунд.

структуру if-then-else-end init.lua воспринимать отказался, игра с операторами or и and вообще привела к тому, что бойцы выгрузились сразу с началом миссии или не выгрузились вообще. Основной во всей этой свистопляске файл msf.lua я ковырять боюсь в виду своей криворукости.

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

Edited by StarLey_Andrew
Posted
Единственный момент где ДКС "ругнулся" - countryID. Воспринимать country.id.Georgia он отказался

 

Georgia нужно большими буквами писать: country.id.GEORGIA

 

Если что список всех идентификаторов стран приведен в руководстве по SSE:

http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World/Part_1#country

 

вот он:

country.id = {
  RUSSIA,
  UKRAINE,
  USA,
  TURKEY,
  UK,
  FRANCE,
  GERMANY,
  CANADA,
  SPAIN,
  THE_NETHERLANDS,
  BELGIUM,
  NORWAY,
  DENMARK,
  ISRAEL,
  GEORGIA,
  INSURGENTS,
  ABKHAZIA,
  SOUTH_OSETIA,
  ITALY
}

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

решил расширить условия высадки.

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

 

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

 

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

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

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

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

Буду премного благодарен!

Posted

BAntDit, подскажи, пожалуйста, какой функцией координаты получить в случае катапультирования?

Попробую своими силами задачу про "спасение катапультанта" порешать...

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)
BAntDit, подскажи, пожалуйста, какой функцией координаты получить в случае катапультирования?

Попробую своими силами задачу про "спасение катапультанта" порешать...

 

Вот этой:

Vec3 function Object.getPoint(Object self) 

- объектом в данном случае будет юнит-инициатор события.

 

Т.е. обработчик события получит event, а его свойство будет содержать инициатора event.initiator.

-----------

Как работать с событиями описано тут: http://en.wiki.eagle.ru/wiki/Simulator_Scripting_Engine/DCS:_World/Part_1#world

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

Posted (edited)

Большое спасибо.

 

Начал потихоньку вникать, и теперь терзают сомнения - по силам ли?...

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

Взял msf.lua отсюда: http://forums.eagle.ru/showpost.php?p=1867010&postcount=193

Но на старте выдает ошибку:

Error_01.jpg.3737d819a7babcacabbba8d106efa052.jpg

В тоже время с файлом msf_beta_1.0.1.lua выдранном из одного из примеров вроде работает.

З.Ы. Если сильно отвлекаю своими нубскими вопросами, дай знать. Не буду тратить время и засорять форум.

Edited by Hitryi

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

Скрипт не видит таблицы mission - это говорит о том, что msf не подключен или подключен как-то не так или подключен позже выполняемого скрипта

или кодировка выполняемого скрипта отличается от UTF-8 (без BOM)

Крайняя версия 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, выручай. Весь день убил :wallbash:

Не могу поставить человека на грешную землю.

Играюсь параметрами point{x,y} в то в воздухе висит, то в море стоит...

local customEventHandler = {};
function customEventHandler:onEvent(event)
if (world.event.S_EVENT_EJECTION == event.id) then

 mission.controller.sendMessageForAll('Пилот катапультировался ');

 local _object = event.initiator;
 local _point = _object:getPoint();

 local _units = {};

 table.insert(_units, { unitType = 'Infantry AK', unitName = 'dynamic_apc_1', playerCanDrive = false, point = { x = _point.x, y = _point.z } });
 local _apc_group_desc = mission.utils.getGroupDescriptor('dynamic_apc', _point, _units);

 local _status, _result = pcall(function() 
   local _apc_group = mission.model:createGroup(Group.Category.GROUND, country.id.RUSSIA, _apc_group_desc);
   return _apc_group;
  end);
 if _status then mission.controller.sendMessageForAll('Наземный юнит создан');
 else mission.controller.sendMessageForAll('Наземный юнит не создан по причине ' .. assert(_result, 'unknown')); end

end
end;
world.addEventHandler(customEventHandler);

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
BAntDit, выручай. Весь день убил :wallbash:

Не могу поставить человека на грешную землю.

Играюсь параметрами point{x,y} в то в воздухе висит, то в море стоит...

 

Попробуй так:

 

local _object = event.initiator;

local _point = _object:getPoint();

 

local _units = {};

 

table.insert(_units, { unitType = 'Infantry AK', unitName = 'dynamic_apc_1', playerCanDrive = false, point = { x = _point.x, y = _point.z } });

 

local _apc_group_desc = mission.utils.getGroupDescriptor('dynamic_apc',

{ x = _point.x, y = land.getHeight({ x = _point.x, y = _point.z }) + 0.1, z = _point.z }, _units);

 

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

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

 

Можешь добавить условие:

if land.SurfaceType.WATER ~= land.getSurfaceType({ x = _point.x, y = _point.z }) then

-- создавать юнита только в случае, если поверхность под ним не вода

-- ... - дальше код создающий юнита

end

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

BAntDit, спасибо.

Но похоже тут глюк.

Если координаты точки получать при помощи local _point = _object:getPoint(); и при этом объектом является самолет, то при создании по этим координатам наземного юнита юнит будет в самой точке, т.е. в воздухе.

Если объектом для получения координат будет вертолет или Мустанг, то юнит создаётся на земле.

Объект цеплялся и по local _object = event.initiator; и по local _object = Unit.getByName('Pilot2'); без разницы.

Думал, что зависит от скорости, но из Мустанга юнит на земле оказывается при скорости 500 км/ч, а из другого самолета висит в воздухе и при 250 км/ч.

 

 

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

 

 

Upd.

 

Баг локализовал. Баг скорее всего мой. =)

Когда добавляем юнит

table.insert(_units, { unitType = 'Infantry AK', unitName = 'dynamic_apc_1', playerCanDrive = false, point = { x = _point.x, y = _point.z } });

координатам надо небольшую прибавку дать

table.insert(_units, { unitType = 'Infantry AK', unitName = 'dynamic_apc_1', playerCanDrive = false, point = { x = _point.x + 10, y = _point.z + 10 } });

Видимо, в момент появления пехотинец оказывается на тушке самолета, поэтому и остается в воздухе.

В предыдущие разы к одной из координат была прибавка, поэтому у небольших самолетов (Мустанг, Ка-50) при определенном курсе пехотинец на самолет не попадал и оказывался на земле.

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

 

Ну и немного с другой области.

Если в миссии есть самолет игрока, на пехотинца можно посмотреть по F7, если нет игрока, пехотинец по F7 не виден.

 

Увлекательное это занятие - баги отлавливать... =)

Edited by Hitryi

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
Bandit помоги плз.

Тут нужно добавить условие "если флаг 1= true"

 

if (world.event.S_EVENT_DEAD == event.id ( & тут вставить условие про флаг) ) then

Может так попробовать:

 

if (world.event.S_EVENT_DEAD == event.id and 1 == trigger.misc.getUserFlag('номер_флага') ) then

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
Может так попробовать:

 

if (world.event.S_EVENT_DEAD == event.id and 1 == trigger.misc.getUserFlag('номер_флага') ) then

 

Да, должно прокатить.

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

Hitryi, а еще лучше рождать юнит через некоторое время после катапультирования (дать время на приземление если это возможно), ну и ждем когда скриптом поделитесь :)

Posted
Hitryi, а еще лучше рождать юнит через некоторое время после катапультирования (дать время на приземление если это возможно), ну и ждем когда скриптом поделитесь :)

Дать время на "приземление" в ближайших планах.

С остальным, все не просто...

-) Радиомаяк включать вроде можно, надо только разобраться как.

-) Заставить юнит подавать сигналы. Тут проблема.

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

Но как отследить приближение спасателя пока не знаю.

Контролировать скриптами вхождение в триггерную зону вроде нет возможности, надо использовать поиск.

-) Проверить работу на сетевом варианте.

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

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
Но как отследить приближение спасателя пока не знаю.

 

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

 

Не большой пример:

timer.scheduleFunction(function(_data)
local _rescuer, _pilot = Unit.getByName(_data.rescuerName), Unit.getByName(_data.pilotName);

if not (_rescuer and _rescuer:isExist()) then 
return timer.getTime() + 300;--если нет юнита спасателя, то снова проверить через 5 мин
end
if not (_pilot and _pilot:isExist()) then 
return nil; --если некого спасть, то снимаем задачу.
end
local _rescuer_point, _pilot_point = _rescuer:getPoint(), _pilot:getPoint();
local _distance = math.sqrt( (_rescuer_point.x -  _pilot_point.x)^2 + (_rescuer_point.z -  _pilot_point.z)^2);

if _distance < 5000 then 
trigger.action.smoke(_pilot_point, trigger.smokeColor.Red);
return nil; -- снять задачу
end

if _distance < 10000  then 
trigger.action.signalFlare(_pilot_point, trigger.flareColor.Red, 0);
end
return timer.getTime() + 2; -- повторить через 2 сек. 
end, { rescuerName = 'heli1',  pilotName = 'a10c_pilot'}, 
timer.getTime() + 5); 

 

как-то так... - пишу не проверяя, так как DCS World под рукой нет.

Крайняя версия 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)
..как-то так... - пишу не проверяя, так как DCS World под рукой нет.

 

Большое спасибо (форум не дает "+" поставить)

Буду пробовать.

 

----------

 

Отличная штука этот timer.scheduleFunction...

Какой потенциал...

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

 

BAntDit, респект! Твой кусок кода заработал сразу и без вопросов.

Edited by Hitryi

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)

Отличная штука этот timer.scheduleFunction...

Какой потенциал...

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

 

Да, timer.scheduleFunction одна из самых полезных функций SSE.

 

Небольшой совет при работе с timer.scheduleFunction:

 

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

pcall или xpcall.

 

Пример:

timer.scheduleFunction(function(_data)
local _status, _result = pcall(function()
-- .. тут внутри pcall ваш полезный код...
end);

if not _status then -- если ошибка внутри pcall
trigger.action.outText('ERROR: ' .. assert(_result, 'unknown reason'), 20); -- сообщаем пользователю
env.error('ERROR: ' .. assert(_result, 'unknown reason'), false); -- записываем в лог 
return nil; -- завершаем работу функции.
end

return timer.getTime() + 2;
end, { rescuerName = 'heli1',  pilotName = 'a10c_pilot'}, 
timer.getTime() + 5);

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

Posted
...

Небольшой совет при работе с timer.scheduleFunction:

 

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

...

Ага. Уже попался на этом =)

В результате: -1 вечер, -N нервных клеток, и уменьшенный ресурс клавиатуры. =)

Выходил из ситуации выдачей текстовых сообщений на каждом шаге. По ним и контролировал выполнение.

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

Парни я со своей телегой еще :)

 

if (1 == trigger.misc.getUserFlag('1')) then
trigger.action.outText('флаг 1', 5);
end

 

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

[sIGPIC][/sIGPIC]

http://action-games.at.ua

Posted

Условие рабочее.

Может флага нет? Или значение не равно 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

  • Recently Browsing   0 members

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