Skip to content

Методы

Как вы уже знаете, объекты в INSTEAD могут находиться в состоянии открыт/закрыт и выключен/включён. Как это соответствует фразам диалога?

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

Для фраз с always = true (или true в начале определения) -- такого закрытия не происходит.

Для фраз с hidden = true (или false в начале определения) -- фраза будет создана как выключенная. Она не будет видима до тех пор, пока не будет явно включена.

Для фраз с cond(), каждый раз при просмотре фраз вызывается этот метод, и в зависимости от возвращаемого значения (true/не true) фраза включается или выключается.

Зная это поведение, вы можете прятать/показывать и анализировать фразы обычными функциями вида: disable / enable / empty / open / close / closed / disabled и так далее...

Однако, делать вы это можете только в самом диалоге, так как все фразы идентифицируются по тегам. Если вы хотите модифицировать состояние/анализировать фразы из других комнат вы можете:

  • дать фразе имя { nam = 'имя' }...
  • искать фразу по тегу в другой комнате: local ph = lookup('#тег', 'диалог') и потом работать с ней;

Что касается функций push/pop, то вы можете вызывать их явно как методы диалога, например:

lua
	_'диалог':push '#новая'

Но лучше это делать в самом диалоге, например, в enter.

Кроме того, есть метод :reset, который сбрасывает стек переходов и устанавливает стартовую фразу, например:

lua
enter = function(s)
	s:reset '#начало'
end

Следует отметить, что когда вы делаете enable/disable/open/close фразы, то вы выполняете действие именно над этой фразой, а не над фразами включёнными внутрь. Но так как при показе фраз движок остановится на выключенном/закрытом объекте-фразе и не войдёт внутрь, этого достаточно.