Jump to content

Что такое LUA ПРЕДИКАТ и как этим ползоваться?


Recommended Posts

Posted

 Фактически, это очень короткая подпрограмма, написанная на языке игры (LUA скрипт), которая не вызывается из отдельного файла с текстом подпрограммы (который может быть довольно большим), хорошо оформленного и с отступами в виде "кусков" (термин языка LUA), а-ля как древний Паскаль или современный С++, например. Предикат может быть записан в одну строку, с обязательным разделением в виде ( ; ) между строками.
 Самый распространённый предикат, ИМХО, это поднятие нужного флага, когда группа ИИ, например (наземка, самолёты), проходят заданный ППМ маршрута. Это однострочный скрипт предикат:
trigger.action.setUserFlag('имя флага', 'значение флага') без кавычек. Как то: trigger.action.setUserFlag(701, 1), что аналогично trigger.action.setUserFlag(701, true)
 При проходе ППМ будет поднят флаг 701, который, при проверке его истинного значения >0, может быть использован  в дальнейшем развитии событий в миссии (смена начального сценария), например.
 p.s Вообще  - эта тема должна быть  в ветке "Помощь разработчику миссий", по-нормальному. Если что, язык программирования LUA - это очень, очень "порезанный" С++, имеющий в преимуществах, прежде всего скорость работы.
 

  • Thanks 2
Posted

p.p.s Извиняюсь, если не очень понял вопрос. Когда скрипт-предикат "trigger.action.setUserFlag" вызывается именно  в "триггерных действиях" МЕ Редактора, то он полностью дублирует действие "Поднять флаг...". Скрипты-предикаты, обычно, эффективны именно в свойствах ППМ нужной группы. LUA-скрипт ( предикатом или LUA-файлом ) - это непосредственное обращение к движку ДКС на её языке - будьте аккуратны, соблюдайте синтаксис команд, а то всё будет глючить.
 https://wiki.hoggitworld.com/view/Category:Scripting

  • Thanks 1
  • 1 month later...
Posted

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

Например, "такой-то юнит не уничтожен", "есть юниты в такой-то зоне" и т.п. Имеет место такой факт или нет.

Lua-предикат - это предикат, написанный на языке Lua. 

Пример из руководства:

local _group = Group.getByName('your_group_name');
if not (_group and _group:isExist()) then return false; end
local _controller = _group:getController();
local _targets = _controller:getDetectedTargets();
for _index, _target in ipairs(_targets) do
 if _target.visible then return true; end – вижу врага!!!
end
return false; 

Этот скрипт делает предикатом то, что он возвращает true (некая группа видит врага) или false (некая группа не видит врага).

Можно где-нибудь впихнуть в него и что-нибудь постороннее, типа упомянутого выше trigger.action.setUserFlag(701, true), и это называется "побочный эффект вычисления предиката".

  • 3 weeks later...
Posted

Прошу пардонов, что вмешался, но в тексте ЛУА увидел некоторые возможности. 
Скажите, коллега, а можно ли прописать 10 групп атакующего в зависимости от гибели предыдущего?
Я пытался сделать через триггеры, но вырастает геометрическая прогрессия.
У Вас, я так вижу, всё решено гораздо элегантнее...

Chopper pilots make History, man. Jetfighters - make movies... ©

  • Recently Browsing   0 members

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