Инструменты пользователя

Инструменты сайта


help:goto

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следущая версия
Предыдущая версия
help:goto [2022/09/12 13:02]
aleks_versus создано
help:goto [2025/09/28 16:15] (текущий)
aleks_versus [Использование массива args для действий и гиперссылок]
Строка 1: Строка 1:
-== Переходы ==+[[help:​acts|Назад:​ Действия]] 
 + 
 +====== Переходы ====== 
 + 
 +Игрок исследует игровой мир, или следует по сюжету игры, перемещаясь по локациям. Задача автора игры — правильно прописать эти перемещения. 
 + 
 +Для перемещения между локациями в **QSP** предусмотрены специальные команды. Эти команды можно использовать в любом месте игры, но как правило,​ их размещают в действиях,​ чтобы позволить игроку самому решать,​ куда он хочет переместиться. 
 + 
 +===== Команды для перемещения между локациями ===== 
 + 
 +  * ''​%%GOTO [$локация]%%''​ — переход на локацию с названием ''​%%[$локация]%%''​. 
 +    * Пример:​ <sxh qsp> 
 +! переход на локацию "​Тронный зал"​ 
 +goto '​Тронный зал'​ 
 +</​sxh>​ 
 +    * При переходе на указанную локацию с помощью команды **GOTO** происходит следующее:​ 
 +      * Очистка **Окна основного описания** и очистка **Окна действий**. 
 +      * Вывод в **Окно основного описания** текста из поля "​**Базовое описание**"​ локации (поле "​**Описание**"​ в **QGen**). 
 +      * Вывод в **Окно действий** действий из поля "​**Базовые действия**"​ 
 +      * Выполнение кода из поля **Выполнить при посещении** 
 +    * Команда ''​%%GOTO%%''​ имеет краткую запись ''​%%GT%%''​. Пример:​ <sxh qsp> 
 +goto "​тёмный_лес"​ 
 +! эквивалентно 
 +gt "​тёмный_лес"​ 
 +</​sxh>​ 
 +    * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ''​%%GOTO%%''​. Значения перечисляются по порядку через запятую после названия локации:​ <sxh qsp> 
 +GOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18] 
 +</​sxh>​ Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​%%ARGS[]%%''​ в ячейки с нулевой по восемнадцатую. Пример:​ <sxh qsp> 
 +# начало 
 +! это код локации начало 
 +act "​Начать игру":​ 
 +  ! при нажатии на действие игрок перейдёт на локацию "​комната"​ 
 +  goto "​комната","​начало"​ & ! на локацию комната будет передана строка со словом "​начало"​ 
 +end 
 +--- начало --- 
 + 
 +# комната 
 +! это код локации комната 
 +$откуда_пришли=$args[0] & ! из $args[0] получаем значение,​ переданное с командой goto 
 +if $откуда_пришли="​начало":​ 
 +  ! если пришли с локации "​начало",​ выводим душещипательную катсцену 
 +  pl "​Здесь начинается наша история"​ 
 +else 
 +  ! если пришли не с локации "​начало",​ просто выводим описание комнаты 
 +  pl "​Описание комнаты"​ 
 +end 
 +--- комната --- 
 +</​sxh>​ 
 +  * ''​%%XGOTO [$локация]%%''​ - переход на локацию с названием ''​%%[$локация]%%''​ БЕЗ очистки **Окна основного описания**. 
 +    * Пример:​ <sxh qsp> 
 +! переход на локацию "​разговор с начальником"​ 
 +xgoto '​разговор с начальником'​ 
 +</​sxh>​ 
 +    * При переходе на указанную локацию с помощью команды ''​%%XGOTO%%''​ происходит следующее:​ 
 +      * Очистка **Окна действий**. 
 +      * Вывод в **Окно основного описания** текста из поля **Базовое описание** локации (поле **Описание** в **QGen**). Новое описание дополняет уже имеющееся. 
 +      * Вывод в **Окно действий** действий из поля **Базовые действия** 
 +      * Выполнение кода из поля **Выполнить при посещении** 
 +    * Команда ''​%%XGOTO%%''​ имеет краткую запись ''​%%XGT%%''​. Пример:​ <sxh qsp> 
 +xgoto "​дремучая_чаща"​ 
 +! эквивалентно 
 +xgt "​дремучая_чаща"​ 
 +</​sxh>​ 
 +    * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ''​%%XGOTO%%''​. Значения перечисляются по порядку через запятую после названия локации:​ <sxh qsp> 
 +XGOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18] 
 +</​sxh>​ Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​%%ARGS[]%%''​ в ячейки с нулевой по восемнадцатую. Пример:​ <sxh qsp> 
 +! локация "​разговор с начальником"​ 
 +$вариант = $args[0] & ! первое значение помещаем в переменную вариант 
 +счётчик = args[1] & ! второе значение — в переменную счётчик 
 +act "— Можно задать вам вопрос?":​ 
 +  *pl 'Я: — Можно задать вам вопрос?'​ 
 +  xgoto '​разговор с начальником',​ '​можно?',​ счётчик + 1 
 +end 
 + 
 +if $вариант = '​можно?':​ 
 +  if счётчик = 1: 
 +    '​Начальник:​ — Задавайте.'​ 
 +  else: 
 +    '​Начальник:​ — Вы это уже спрашивали.'​ 
 +  end 
 +else: 
 +  '​Начальник:​ — С чем пожаловали?'​ 
 +end 
 +</​sxh>​ 
 + 
 +===== Использование массива ARGS для действий и гиперссылок ===== 
 + 
 +Вы можете использовать значения из массива ''​ARGS''​ не только в коде локации,​ на которую был осуществлён переход,​ но так же и в гиперссылках,​ выведенных на экран и в действиях. Примеры:​ <sxh qsp> 
 +args[0] = 12 
 +act 'Show args[0]':​ 
 +   *pl args[0] & ! на экране увидим 12 
 +end 
 + 
 +! щелчки по гиперссылке будут увеличивать значение args[1] 
 +'<a href="​EXEC:​args[1] += 1">​Прибавить число</​a>'​ 
 +! а если щёлкнуть по этой гиперссылке,​ 
 +! значение args[1] появится в дополнительном описании:​ 
 +'<a href="​EXEC:​pl args[1]">​Узнать число</​a>'​ 
 +</​sxh>​ 
 + 
 +Точно так же, как и для любой другой локации,​ массив ''​ARGS''​ уникален для текущей локации,​ и будет полностью уничтожаться при переходе на новую локацию. 
 + 
 +Это позволяет хранить и использовать необходимые данные только на одной локации. Например,​ можно записывать в ''​ARGS''​ многострочный код QSP и выполнять его из гиперссылок с помощью dynamic. 
 + 
 +<sxh qsp> 
 +$args[21] = { 
 +  if no деньги<​100:​ 
 +    addobj '​Кружка имбирного эля'​  
 +    кружка_эля += 1  
 +    деньги -= 100 
 +    *pl "Я приобрёл кружку имбирного эля."​ 
 +  else 
 +     *pl "​Мне не хватает денег на эль."​ 
 +  end 
 +
 +*pl "<a href='​exec:​dynamic $args[21]'>​Купить кружку имбирного эля</​a>"​ 
 +</​sxh>​ 
 +===== Команды посещения локаций ===== 
 + 
 +Иногда нам нужно прервать выполнение определённого кода, выполнить код на другой локации,​ а затем вернуться и продолжить выполнять прерванный код. В таких случаях операторы ''​%%GOTO%%''​ и ''​%%XGOTO%%''​ нам не подходят,​ ведь они осуществляют **переход** на локацию и оставляют нас на ней. 
 + 
 +В **QSP** есть более подходящие для таких ситуаций команды,​ они подробно описаны в разделе [[help:​organizing|"​Пользовательские функции и процедуры"​]]. 
 + 
 +[[help:​objs|Вперёд:​ Предметы (инвентарь)]]
  
-`Это заготовка страницы по переходам между локациями. В настоящее время справка перерабатывается. Скоро данная страница станет полноценной.` 
help/goto.1662987756.txt.gz · Последние изменения: 2022/09/12 13:02 — aleks_versus