Возврат на предыдущую локацию
Возврат на предыдущую локацию
Запоминаем текущую локацию при переходе, чтобы потом вернуться на неё.
Код:
! В начале игры назначаем обработчик перехода на новую локацию.
$ONNEWLOC = 'ONNEWLOC'
! В локации "ONNEWLOC":
IF $CURLOC <> $nextLoc:
$prevLoc = $nextLoc
$nextLoc = $CURLOC
END
! В локации, из которой надо вернуться на предыдущую:
ACT 'Вернуться':
GOTO $prevLoc
END
06.Июл.14 19:11:48
Re: Возврат на предыдущую локацию
В локации "ONNEWLOC":
Код:
if $CURLOC ! $nextHLoc:
if $CURLOC = $historyLoc[ARRSIZE ('$historyLoc') - 1] and ARRSIZE ('$historyLoc'):
killvar '$historyLoc', ARRSIZE ('$historyLoc') - 1
$nextHLoc = $CURLOC
else
$historyLoc[] = $nextHLoc
$nextHLoc = $CURLOC
end
if ARRSIZE ('$historyLoc'): $prevHLoc = $historyLoc[ARRSIZE ('$historyLoc') - 1]
end
14.Июл.14 11:27:29
Re: Возврат на предыдущую локацию
-1?
Обращения по такому индексу не произойдет. Подумайте, почему.
Но, в общем-то, этот код лучше использовать не как замену оригинальному, а совместно с ним. Для этого надо в нем не присваивать результат переменной $prevLoc, а использовать другую, например, $prevHLoc.
Очень часто встречаются локации с единственным настоящим выходом, но переменная $prevLoc приведет вас не туда, куда вы рассчитывали.
Пример: комната с одним выходом, а в ней шкаф, оформленный отдельной локацией, в шкафу - аналогичная шкатулка, в шкатулке - яйцо Кащея какое-нибудь зеркало-локация. Посетив такие псевдо-локации, вы хотите уйти из комнаты. Но не просто уйти, а уйти именно туда, откуда вы когда-то попали в эту комнату. В этом вам поможет $prevHLoc.
Поправил свой код с учетом сказанного.
Re: Возврат на предыдущую локацию
evp написал(а):
Обращения по такому индексу не произойдет. Подумайте, почему.
Обращение по такому индексу происходит, но ошибки не возникает. Я забыл, как qsp себя ведёт, но вроде обращение переадресовывается по индексу 0. Проверку "and ARRSIZE ('$historyLoc')" можно убрать. А код работает, интуиция меня подвела.
Re: Возврат на предыдущую локацию
Еще одно важное замечание. В силу особенностей работы локации $ONNEWLOC, у вас не получится работать с переменной $prevLoc в коде вашей локации. Например, если вы попытаетесь использовать ссылку:
Код:
'<a href = "exec: gt ''<<prevLoc>>''">Назад</a>'
Вы будете несколько разочарованы, так как она приведет вовсе не на предыдущую локацию. Так получается потому, что переменная $prevLoc в момент формирования ссылки еще не обновила своего значения (она "станет правильной" после выполнения кода всей локации). Следовательно, с ней можно полноценно работать только в действиях (act: gt $prevLoc).
Но было бы жалко потерять такое изящное решение, как предложенное в первом сообщении. Могу предложить возможный выход: использовать в коде локации что-то наподобие
Код:
'<a href = "dynamic $moveBackward">Назад</a>'
Где
$moveBackward = {
gt $prevLoc
}
Саму переменную $moveBackward можете определить в стартовой локации или любой другой подходящей для этой цели.
Re: Возврат на предыдущую локацию
Вы будете несколько разочарованы, так как она приведет вовсе не на предыдущую локацию.
Ещё бы. Ведь ты забыл знак "$".
А использовать предыдущую очень просто: на этапе выполнения кода локации она хранится в $nextLoc.
Что касается конкретно твоего примера со ссылкой, следует убрать подвыражения, тогда на момент нажатия ссылки в переменной уже будет корректное значение.
Код:
'<a href = "EXEC: GOTO $prevLoc">Назад</a>'
Информация
- Статистика форума:
- Всего тем:
- 1062
- Всего опросов:
- 14
- Всего сообщений:
- 16791271
- Бездействующий:
- Пользователи форума:
- Всего пользователей:
- 2903
- Последним зарегистрировался:
- Rfr
