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