[[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|Вперёд: Предметы (инвентарь)]]