Перейти к основному содержимому

13.5. Не работает *pl в действии с goto

В: Не работает *pl в действии с goto.

Ожидаю, что при нажатии на действие на экране появится текст, а действие исчезнет, но этого не происходит. Вот код в поле "выполнить при посещении" локации:

if hide_act=0:
act 'Далее':
hide_act=1
*pl 'Действие скрылось.'
goto $curloc
end
end

О: Необходимо чётко представлять, как работает плеер в этом случае.

Сначала проверяется условие hide_act = 0. Если условие верно, плеер выводит на экран действие "Далее". Этому действию соответствует набор команд:

hide_act=1
*pl 'Действие скрылось.'
goto $curloc

При нажатии на действие, команды выполняются по порядку:

hide_act=1                    & ! переменной hide_act присваивается значение 1

*pl 'Действие скрылось.' & ! на экран выводится строка текста

goto $curloc & ! плеер перезаходит на текущую локацию

Итак, казалось бы всё правильно. Строка текста должна появиться на экране, а затем происходит повторный вход на текущую локацию. Однако при выполнении команды goto плеер очищает окно основного описания и окно действий. Именно поэтому действие при перезаходе на локацию "пропадёт". И именно поэтому мы не успеем увидеть, как надпись "Действие скрылось." будет выведена на экран.

Эту проблему можно решить следующим образом:

if hide_act=0:
act 'Далее':
hide_act=1
*pl 'Действие скрылось.'
wait 1500
goto $curloc
end
end

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

if hide_act=1:
*pl 'Действие скрылось.'
end
if hide_act=0:
act 'Далее':
hide_act=1
goto $curloc
end
end