Здесь показаны различия между двумя версиями данной страницы.
| 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|Вперёд: Предметы (инвентарь)]] | ||
| + | |||