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

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


help:goto

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:goto [2022/09/12 19:05]
aleks_versus
help:goto [2025/09/28 16:15] (текущий)
aleks_versus [Использование массива args для действий и гиперссылок]
Строка 9: Строка 9:
 ===== Команды для перемещения между локациями ===== ===== Команды для перемещения между локациями =====
  
- *  **GOTO** [$локация] — переход на локацию с названием ​//[$локация]//+  ​''​%%GOTO [$локация]%%'' ​— переход на локацию с названием ​''​%%[$локация]%%''​
- * Пример:<​sxh qsp> +    * Пример:​ <sxh qsp> 
- ! переход на локацию "​Тронный зал"​ +! переход на локацию "​Тронный зал"​ 
- goto '​Тронный зал'</​sxh>​ +goto '​Тронный зал'​ 
- * При переходе на указанную локацию с помощью команды **GOTO** происходит следующее:​ +</​sxh>​ 
- * Очистка ​''​Окна основного описания'' ​и очистка ​''​Окна действий''​+    * При переходе на указанную локацию с помощью команды **GOTO** происходит следующее:​ 
- * Вывод в ''​Окно основного описания'' ​текста из поля "​**Базовое описание**"​ локации (поле "​**Описание**"​ в **QGen**). +      * Очистка ​**Окна основного описания** и очистка ​**Окна действий**
- * Вывод в ''​Окно действий'' ​действий из поля "​**Базовые действия**"​ +      * Вывод в **Окно основного описания** текста из поля "​**Базовое описание**"​ локации (поле "​**Описание**"​ в **QGen**). 
- * Выполнение кода из поля ​"**Выполнить при посещении**" +      * Вывод в **Окно действий** действий из поля "​**Базовые действия**"​ 
- * Команда ​**GOTO** имеет краткую запись ​**GT**. Пример:<​sxh qsp> +      * Выполнение кода из поля **Выполнить при посещении** 
- goto "​тёмный_лес"​ +    * Команда ​''​%%GOTO%%'' ​имеет краткую запись ​''​%%GT%%''​. Пример:​ <sxh qsp> 
- ! эквивалентно +goto "​тёмный_лес"​ 
- gt "​тёмный_лес"</​sxh>​ +! эквивалентно 
- * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ​**GOTO**. Значения перечисляются по порядку через запятую после названия локации:<​sxh qsp> +gt "​тёмный_лес"​ 
- GOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18]</​sxh>​Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​args[]''​ в ячейки с нулевой по восемнадцатую. Пример:<​sxh qsp> +</​sxh>​ 
- # начало +    * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ​''​%%GOTO%%''​. Значения перечисляются по порядку через запятую после названия локации:​ <sxh qsp> 
- ! это код локации начало +GOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18] 
- act "​Начать игру":​ +</​sxh>​ Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​%%ARGS[]%%''​ в ячейки с нулевой по восемнадцатую. Пример:​ <sxh qsp> 
- ! при нажатии на действие игрок перейдёт на локацию "​комната"​ +# начало 
- goto "​комната","​начало"​ & ! на локацию комната будет передана строка со словом "​начало"​ +! это код локации начало 
- end +act "​Начать игру":​ 
- --- начало ---+  ! при нажатии на действие игрок перейдёт на локацию "​комната"​ 
 +  goto "​комната","​начало"​ & ! на локацию комната будет передана строка со словом "​начало"​ 
 +end 
 +--- начало ---
  
- # комната +# комната 
- ! это код локации комната +! это код локации комната 
- $откуда_пришли=$args[0] & ! из $args[0] получаем значение,​ переданное с командой goto +$откуда_пришли=$args[0] & ! из $args[0] получаем значение,​ переданное с командой goto 
- if $откуда_пришли="​начало":​ +if $откуда_пришли="​начало":​ 
- ! если пришли с локации "​начало",​ выводим душещипательную катсцену +  ! если пришли с локации "​начало",​ выводим душещипательную катсцену 
- *pl "​Здесь начинается наша история"​ +  pl "​Здесь начинается наша история"​ 
- else +else 
- ! если пришли не с локации "​начало",​ просто выводим описание комнаты +  ! если пришли не с локации "​начало",​ просто выводим описание комнаты 
- *pl "​Описание комнаты"​ +  pl "​Описание комнаты"​ 
- end  +end 
- --- комната ---</​sxh>​ +--- комната --- 
-  **XGOTO** //[$локация]// - переход на локацию с названием ​//[$локация]// БЕЗ очистки ​''​Окна основного описания''​+</​sxh>​ 
- * Пример:<​sxh qsp> +  * ''​%%XGOTO [$локация]%%'' ​- переход на локацию с названием ​''​%%[$локация]%%'' ​БЕЗ очистки ​**Окна основного описания**
- ! переход на локацию "​разговор с начальником"​ +    * Пример:​ <sxh qsp> 
- xgoto '​разговор с начальником'</​sxh>​ +! переход на локацию "​разговор с начальником"​ 
- * При переходе на указанную локацию с помощью команды ​**XGOTO** происходит следующее:​ +xgoto '​разговор с начальником'​ 
- * Очистка ​''​Окна действий''​+</​sxh>​ 
- * Вывод в ''​Окно основного описания'' ​текста из поля ​"**Базовое описание**" ​локации (поле ​"**Описание**" ​в QGen). Новое описание дополняет уже имеющееся. +    * При переходе на указанную локацию с помощью команды ​''​%%XGOTO%%'' ​происходит следующее:​ 
- * Вывод в ''​Окно действий'' ​действий из поля ​"**Базовые действия**" +      * Очистка ​**Окна действий**
- * Выполнение кода из поля ​"**Выполнить при посещении**" +      * Вывод в **Окно основного описания** текста из поля **Базовое описание** локации (поле **Описание** в **QGen**). Новое описание дополняет уже имеющееся. 
- * Команда ​**XGOTO** имеет краткую запись ​**XGT**. Пример:<​sxh qsp> +      * Вывод в **Окно действий** действий из поля **Базовые действия** 
- xgoto "​дремучая_чаща"​ +      * Выполнение кода из поля **Выполнить при посещении** 
- ! эквивалентно +    * Команда ​''​%%XGOTO%%'' ​имеет краткую запись ​''​%%XGT%%''​. Пример:​ <sxh qsp> 
- xgt "​дремучая_чаща"</​sxh>​ +xgoto "​дремучая_чаща"​ 
- * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ​**XGOTO**. Значения перечисляются по порядку через запятую после названия локации:<​sxh qsp> +! эквивалентно 
- XGOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18]</​sxh>​Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​args[]''​ в ячейки с нулевой по восемнадцатую. Пример:<​sxh qsp> +xgt "​дремучая_чаща"​ 
- ! локация "​разговор с начальником"​ +</​sxh>​ 
- $вариант=$args[0] & ! первое значение помещаем в переменную вариант +    * При переходе,​ на локацию можно передавать до девятнадцати значений вместе с командой ​''​%%XGOTO%%''​. Значения перечисляются по порядку через запятую после названия локации:​ <sxh qsp> 
- счётчик=args[1] & ! второе значение ​ в переменную счётчик +XGOTO [$локация],​[аргумент 0],​[аргумент 1], ... ,​[аргумент 18] 
- act "— Можно задать вам вопрос?":​ +</​sxh>​ Передаваемые на локацию значения называются **аргументами** или **параметрами**. Эти значения плеер автоматически помещает в специальный массив ''​%%ARGS[]%%''​ в ячейки с нулевой по восемнадцатую. Пример:​ <sxh qsp> 
- *pl 'Я: — Можно задать вам вопрос?'​ +! локация "​разговор с начальником"​ 
- xgoto '​разговор с начальником','​можно?',​счётчик+1 +$вариант = $args[0] & ! первое значение помещаем в переменную вариант 
- end +счётчик = args[1] & ! второе значение ​— в переменную счётчик 
- if $вариант='​можно?':​ +act "— Можно задать вам вопрос?":​ 
- if счётчик=1:​ +  *pl 'Я: — Можно задать вам вопрос?'​ 
- '​Начальник:​ — Задавайте.'​ +  xgoto '​разговор с начальником',​ '​можно?',​ счётчик + 1 
- else +end
- '​Начальник:​ — Вы это уже спрашивали.'​ +
- end +
- else +
- '​Начальник:​ — С чем пожаловали?'​ +
- end</​sxh>​+
  
 +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** нам не подходят,​ ведь они осуществляют **переход** на локацию и оставляют нас на ней.+Иногда нам нужно прервать выполнение определённого кода, выполнить код на другой локации,​ а затем вернуться и продолжить выполнять прерванный код. В таких случаях операторы ​''​%%GOTO%%'' ​и ''​%%XGOTO%%'' ​нам не подходят,​ ведь они осуществляют **переход** на локацию и оставляют нас на ней.
  
 В **QSP** есть более подходящие для таких ситуаций команды,​ они подробно описаны в разделе [[help:​organizing|"​Пользовательские функции и процедуры"​]]. В **QSP** есть более подходящие для таких ситуаций команды,​ они подробно описаны в разделе [[help:​organizing|"​Пользовательские функции и процедуры"​]].
  
 [[help:​objs|Вперёд:​ Предметы (инвентарь)]] [[help:​objs|Вперёд:​ Предметы (инвентарь)]]
 +
help/goto.1663009559.txt.gz · Последние изменения: 2022/09/12 19:05 — aleks_versus