Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

5.1. Как сделать так, чтобы не писать один и тот же код в каждой локации?

В: Как сделать так, чтобы не писать один и тот же код в каждой локации?

О:

В QSP есть возможность использовать различные служебные локации, которые позволяют автоматизировать выполнение определённых задач. В том числе и выполнение одинакового кода при переходе с локации на локацию.

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

! очищаем окно дополнительного описания
clr
! выводим название текущей локации в окно доп.описания
pl $curloc

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

Далее необходимо указать плееру, какую локацию он должен использовать как локацию-обработчик перехода на новую локацию. Для этого в системную переменную `$onnewloc` необходимо поместить название созданной нами локации. Пишем, например на самой первой локации в игре:

$onnewloc="при_переходе"

Теперь на локации "при_переходе" пишем наш код, и проверяем, как работает.

Обратите внимание. Сначала выполняется код локации, на которую был осуществлён переход, а затем только код локации-обработчика перехода.

Поэтому если в основной локации происходит вывод на экран значений, например так:

*pl "Ваше здоровье <<health>>."

А в локации-обработчике перехода на новую локацию стоит код, увеличивающий значение переменной `health`:

if health<100:
    health=health+10
end

На экране появится старое значение переменной `health`, хотя по факту оно будет уже новым.