[[help:acts|Назад: Действия]]
====== Переходы ======
Игрок исследует игровой мир, или следует по сюжету игры, перемещаясь по локациям. Задача автора игры — правильно прописать эти перемещения.
Для перемещения между локациями в **QSP** предусмотрены специальные команды. Эти команды можно использовать в любом месте игры, но как правило, их размещают в действиях, чтобы позволить игроку самому решать, куда он хочет переместиться.
===== Команды для перемещения между локациями =====
* ''%%GOTO [$локация]%%'' — переход на локацию с названием ''%%[$локация]%%''.
* Пример:
! переход на локацию "Тронный зал"
goto 'Тронный зал'
* При переходе на указанную локацию с помощью команды **GOTO** происходит следующее:
* Очистка **Окна основного описания** и очистка **Окна действий**.
* Вывод в **Окно основного описания** текста из поля "**Базовое описание**" локации (поле "**Описание**" в **QGen**).
* Вывод в **Окно действий** действий из поля "**Базовые действия**"
* Выполнение кода из поля **Выполнить при посещении**
* Команда ''%%GOTO%%'' имеет краткую запись ''%%GT%%''. Пример:
goto "тёмный_лес"
! эквивалентно
gt "тёмный_лес"
* При переходе, на локацию можно передавать до девятнадцати значений вместе с командой ''%%GOTO%%''. Значения перечисляются по порядку через запятую после названия локации:
GOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]
Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''%%ARGS[]%%'' в ячейки с нулевой по восемнадцатую. Пример:
# начало
! это код локации начало
act "Начать игру":
! при нажатии на действие игрок перейдёт на локацию "комната"
goto "комната","начало" & ! на локацию комната будет передана строка со словом "начало"
end
--- начало ---
# комната
! это код локации комната
$откуда_пришли=$args[0] & ! из $args[0] получаем значение, переданное с командой goto
if $откуда_пришли="начало":
! если пришли с локации "начало", выводим душещипательную катсцену
pl "Здесь начинается наша история"
else
! если пришли не с локации "начало", просто выводим описание комнаты
pl "Описание комнаты"
end
--- комната ---
* ''%%XGOTO [$локация]%%'' - переход на локацию с названием ''%%[$локация]%%'' БЕЗ очистки **Окна основного описания**.
* Пример:
! переход на локацию "разговор с начальником"
xgoto 'разговор с начальником'
* При переходе на указанную локацию с помощью команды ''%%XGOTO%%'' происходит следующее:
* Очистка **Окна действий**.
* Вывод в **Окно основного описания** текста из поля **Базовое описание** локации (поле **Описание** в **QGen**). Новое описание дополняет уже имеющееся.
* Вывод в **Окно действий** действий из поля **Базовые действия**
* Выполнение кода из поля **Выполнить при посещении**
* Команда ''%%XGOTO%%'' имеет краткую запись ''%%XGT%%''. Пример:
xgoto "дремучая_чаща"
! эквивалентно
xgt "дремучая_чаща"
* При переходе, на локацию можно передавать до девятнадцати значений вместе с командой ''%%XGOTO%%''. Значения перечисляются по порядку через запятую после названия локации:
XGOTO [$локация],[аргумент 0],[аргумент 1], ... ,[аргумент 18]
Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''%%ARGS[]%%'' в ячейки с нулевой по восемнадцатую. Пример:
! локация "разговор с начальником"
$вариант = $args[0] & ! первое значение помещаем в переменную вариант
счётчик = args[1] & ! второе значение — в переменную счётчик
act "— Можно задать вам вопрос?":
*pl 'Я: — Можно задать вам вопрос?'
xgoto 'разговор с начальником', 'можно?', счётчик + 1
end
if $вариант = 'можно?':
if счётчик = 1:
'Начальник: — Задавайте.'
else:
'Начальник: — Вы это уже спрашивали.'
end
else:
'Начальник: — С чем пожаловали?'
end
===== Команды посещения локаций =====
Иногда нам нужно прервать выполнение определённого кода, выполнить код на другой локации, а затем вернуться и продолжить выполнять прерванный код. В таких случаях операторы ''%%GOTO%%'' и ''%%XGOTO%%'' нам не подходят, ведь они осуществляют **переход** на локацию и оставляют нас на ней.
В **QSP** есть более подходящие для таких ситуаций команды, они подробно описаны в разделе [[help:organizing|"Пользовательские функции и процедуры"]].
[[help:objs|Вперёд: Предметы (инвентарь)]]