Анатоль Posted November 18, 2023 Posted November 18, 2023 Что такое LUA ПРЕДИКАТ в тримерах и как этим ползоваться?
Olle1004 Posted November 18, 2023 Posted November 18, 2023 Фактически, это очень короткая подпрограмма, написанная на языке игры (LUA скрипт), которая не вызывается из отдельного файла с текстом подпрограммы (который может быть довольно большим), хорошо оформленного и с отступами в виде "кусков" (термин языка LUA), а-ля как древний Паскаль или современный С++, например. Предикат может быть записан в одну строку, с обязательным разделением в виде ( ; ) между строками. Самый распространённый предикат, ИМХО, это поднятие нужного флага, когда группа ИИ, например (наземка, самолёты), проходят заданный ППМ маршрута. Это однострочный скрипт предикат: trigger.action.setUserFlag('имя флага', 'значение флага') без кавычек. Как то: trigger.action.setUserFlag(701, 1), что аналогично trigger.action.setUserFlag(701, true) При проходе ППМ будет поднят флаг 701, который, при проверке его истинного значения >0, может быть использован в дальнейшем развитии событий в миссии (смена начального сценария), например. p.s Вообще - эта тема должна быть в ветке "Помощь разработчику миссий", по-нормальному. Если что, язык программирования LUA - это очень, очень "порезанный" С++, имеющий в преимуществах, прежде всего скорость работы. 2
Olle1004 Posted November 18, 2023 Posted November 18, 2023 p.p.s Извиняюсь, если не очень понял вопрос. Когда скрипт-предикат "trigger.action.setUserFlag" вызывается именно в "триггерных действиях" МЕ Редактора, то он полностью дублирует действие "Поднять флаг...". Скрипты-предикаты, обычно, эффективны именно в свойствах ППМ нужной группы. LUA-скрипт ( предикатом или LUA-файлом ) - это непосредственное обращение к движку ДКС на её языке - будьте аккуратны, соблюдайте синтаксис команд, а то всё будет глючить. https://wiki.hoggitworld.com/view/Category:Scripting 1
vvm13 Posted December 20, 2023 Posted December 20, 2023 "Предикат" - это "утверждение". Попросту говоря, логическое выражение, которое может быть истинным или не быть. Например, "такой-то юнит не уничтожен", "есть юниты в такой-то зоне" и т.п. Имеет место такой факт или нет. 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), и это называется "побочный эффект вычисления предиката".
Uragx Posted January 5, 2024 Posted January 5, 2024 Прошу пардонов, что вмешался, но в тексте ЛУА увидел некоторые возможности. Скажите, коллега, а можно ли прописать 10 групп атакующего в зависимости от гибели предыдущего? Я пытался сделать через триггеры, но вырастает геометрическая прогрессия. У Вас, я так вижу, всё решено гораздо элегантнее... Chopper pilots make History, man. Jetfighters - make movies... ©
Recommended Posts