Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
13.5. Не работает `*pl` в действии с `goto`
В: Не работает `*pl` в действии с `goto`.
Ожидаю, что при нажатии на действие на экране появится текст, а действие исчезнет, но этого не происходит. Вот код в поле "выполнить при посещении" локации:
act 'Далее':
hide_act=1
*pl 'Действие скрылось.'
goto $curloc
end
end
О:
Необходимо чётко представлять, как работает плеер в этом случае.
Сначала проверяется условие `hide_act=0`. Если условие верно, плеер выводит на экран действие "Далее". Этому действию соответствует набор команд:
*pl 'Действие скрылось.'
goto $curloc
При нажатии на действие, команды выполняются по порядку:
*pl 'Действие скрылось.' & ! на экран выводится строка текста
goto $curloc & ! плеер перезаходит на текущую локацию
Итак, казалось бы всё правильно. Строка текста должна появиться на экране, а затем происходит повторный вход на текущую локацию. Однако при выполнении команды `goto` плеер очищает окно основного описания и окно действий. Именно поэтому действие при перезаходе на локацию "пропадёт". И именно поэтому мы не успеем увидеть, как надпись "Действие скрылось." будет выведена на экран.
Эту проблему можно решить следующим образом:
act 'Далее':
hide_act=1
*pl 'Действие скрылось.'
wait 1500
goto $curloc
end
end
Так между выведением надписи на экран и переходом на текущую локацию будет задержка полторы секунды. Это не лучший способ, поскольку любая задержка, когда ничего нельзя сделать в игре, довольно сильно раздражает игрока. Намного правильнее выводить надпись, как и действие, по условию:
*pl 'Действие скрылось.'
end
if hide_act=0:
act 'Далее':
hide_act=1
goto $curloc
end
end