Структура скрипта#

MD хранит обработчики внутри mdscript → cues → cue. Действия находятся в actions. Cue без условий подходит для короткой инициализации.

XML
<mdscript name="WikiExample">
  <cues>
    <cue name="Init">
      <actions>
        <set_value name="$Count" exact="0" />
      </actions>
    </cue>
  </cues>
</mdscript>

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

Обработчик события#

Для повторяющихся UI-событий используется следующий шаблон. Фрагмент размещается внутри cues:

XML
<cue name="Read" instantiate="true" namespace="this">
  <conditions>
    <event_ui_triggered screen="'WikiExample'" control="'read'" />
  </conditions>
  <actions>
    <set_value name="$Payload" exact="event.param3" />
    <debug_text text="'Wiki read request received'" />
  </actions>
</cue>

instantiate="true" позволяет обрабатывать повторяющиеся события отдельными экземплярами. Не сохраняйте изменяемые данные разных запросов в общей переменной без явной причины.

Условие без события#

При check_value без события задайте режим проверки, например checkinterval или onfail, согласно контракту cue. В проекте отсутствие режима прошло XSD, но вызвало отказ парсера игры.

Не используйте return как универсальный выход из обычного cue: в нашем сценарии X4 9.00 это было отвергнуто движком. Для раннего ограничения действий использовались условные блоки; возврат результата оставался внутри соответствующей library.

Отладка#

Отделяйте три вопроса: загрузился ли файл, пришло ли событие, произошёл ли эффект. Одна строка в логе отвечает только на тот вопрос, для которого её поставили.

См. мост Lua ↔ MD и проверку поведения в игре.