Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:organizing [2024/10/14 11:40] aleks_versus обновление 5.9.0 |
help:organizing [2025/09/28 15:40] (текущий) aleks_versus |
||
---|---|---|---|
Строка 157: | Строка 157: | ||
</sxh> | </sxh> | ||
- | , где ''%%[$локация]%%'' — это название локации, код которой мы хотим выполнить без непосредственного перехода на неё. Значения ''%%[аргумент 0]%%'', ''%%[аргумент 1]%%'' и т.д. могут использоваться на этой локации, их значения автоматически помещаются в ячейки массива ''%%ARGS[0]%%'', ''%%ARGS[1]%%'', и т.д. соответственно. После обработки локации предыдущие значения ''%%ARGS%%'' восстанавливаются. Использование аргументов не обязательно. | + | , где ''%%[$локация]%%'' — это название локации, код которой мы хотим выполнить без непосредственного перехода на неё. Значения ''%%[аргумент 0]%%'', ''%%[аргумент 1]%%'' и т.д. могут использоваться на этой локации, их значения автоматически помещаются в ячейки массива ''%%ARGS[0]%%'', ''%%ARGS[1]%%'', и т.д. соответственно. Использование аргументов не обязательно. |
Оператор имеет краткую форму ''%%GS%%'': | Оператор имеет краткую форму ''%%GS%%'': | ||
Строка 180: | Строка 180: | ||
На каждой локации автоматически создаётся собственный уникальный массив ''%%ARGS%%'', поэтому значения в этом массиве для каждой локации будут свои собственные. После выполнения кода локации, вызванной по ''%%GOSUB%%'', массив ''%%ARGS%%'' этой локации уничтожается. | На каждой локации автоматически создаётся собственный уникальный массив ''%%ARGS%%'', поэтому значения в этом массиве для каждой локации будут свои собственные. После выполнения кода локации, вызванной по ''%%GOSUB%%'', массив ''%%ARGS%%'' этой локации уничтожается. | ||
- | **Обратите внимание!** Значения из массива ''%%ARGS%%'' с локации, вызванной через GOSUB, не транслируются в блоки ''%%ACT%%''. В блоки ''%%ACT%%'' транслируются значения ''%%ARGS%%'' из текущей локации, т.е. локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%''/''%%XGOTO%%''. | + | **Обратите внимание!** Значения из массива ''%%ARGS%%'' с локации, вызванной через GOSUB, не транслируются в блоки ''%%ACT%%'' и гиперссылки. В блоки ''%%ACT%%'' и гиперссылки транслируются значения ''%%ARGS%%'' из текущей локации, т.е. локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%''/''%%XGOTO%%''. |
<sxh qsp> | <sxh qsp> | ||
Строка 206: | Строка 206: | ||
!обработка локации с названием из переменной $location | !обработка локации с названием из переменной $location | ||
!Передаётся один параметр - args[0] равен 1. | !Передаётся один параметр - args[0] равен 1. | ||
- | GS $location,1 | + | GS $location, 1 |
!обработка локации "ход" с передачей 3-х параметров. | !обработка локации "ход" с передачей 3-х параметров. | ||
Строка 212: | Строка 212: | ||
! $args[2] = "данные". Обратите внимание на символы '$'. | ! $args[2] = "данные". Обратите внимание на символы '$'. | ||
GS 'ход',$var,2,'данные' | GS 'ход',$var,2,'данные' | ||
+ | </sxh> | ||
+ | |||
+ | Cуществует краткая форма записи, не требующая явного указания оператора ''GOSUB'': | ||
+ | |||
+ | <sxh qsp> | ||
+ | @@[$локация] [аргумент 0], [аргумент 1], ... ,[аргумент 18] | ||
+ | </sxh> | ||
+ | |||
+ | Название локации ''[$локация]'' не заключается в кавычки и не должно содержать спецсимволов, кроме точки. Допустимо заключать аргументы в скобки. | ||
+ | |||
+ | <sxh qsp> | ||
+ | @@inventory.add 'ScrewDriver', 12 | ||
+ | |||
+ | @@reset_screen('black-green') | ||
+ | </sxh> | ||
+ | |||
+ | ==== Неявный вызов оператора GOSUB ==== | ||
+ | |||
+ | Вы можете не прописывать всякий раз оператор ''GOSUB'' явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: | ||
+ | |||
+ | <sxh qsp> | ||
+ | @@[$локация] [аргумент 0],[аргумент 1], ... ,[аргумент 18] | ||
+ | </sxh> | ||
+ | |||
+ | Здесь ''%%[$локация]%%'' — это название локации, код которой мы хотим выполнить без непосредственного перехода на неё. Аргументы ''%%[аргумент 0]%%'', ''%%[аргумент 1]%%'' и т.д. могут использоваться на этой локации, их значения автоматически помещаются в ячейки массива ''%%ARGS[0]%%'', ''%%ARGS[1]%%'', и т.д. соответственно. | ||
+ | |||
+ | То есть: пишем ''%%@@%%'', затем без пробелов название локации, потом ставим пробел и через запятую перечисляем аргументы. | ||
+ | |||
+ | При такой записи необходимо соблюдать несколько правил: | ||
+ | |||
+ | * Название локации не должно содержать пробелов, символов математических операций и специальных символов (за исключением точки) | ||
+ | * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных. | ||
+ | * Аргументы, передаваемые на локацию, можно заключать в скобки, но можно и не заключать. | ||
+ | * Нельзя подставить вместо названия локации значение переменной! | ||
+ | |||
+ | Пример локации для подъёма яблока: | ||
+ | |||
+ | <sxh qsp> | ||
+ | !# поднять_яблоко | ||
+ | if яблоки['рюкзак']=0: | ||
+ | addobj "Яблоки" | ||
+ | end | ||
+ | яблоки['рюкзак']+=1 | ||
+ | яблоки[$curloc]-=1 | ||
+ | </sxh> | ||
+ | |||
+ | Действие, которое мы пишем на любой другой локации: | ||
+ | |||
+ | <sxh qsp> | ||
+ | act "Взять яблоко": | ||
+ | @@поднять_яблоко | ||
+ | end | ||
+ | </sxh> | ||
+ | |||
+ | Другие примеры: | ||
+ | |||
+ | <sxh qsp> | ||
+ | @@sys.init | ||
+ | @@hero.init | ||
+ | @@loc.type 'page' | ||
+ | |||
+ | @@map_set_cell [0,12], 'дерево' | ||
</sxh> | </sxh> | ||
Строка 271: | Строка 333: | ||
На каждой локации автоматически создаются свои собственные уникальные массивы ''%%ARGS%%'' и ''%%RESULT%%'', поэтому значения в этих массивах для каждой локации будут свои собственные. После выполнения кода локации, вызванной по ''%%FUNC%%'', массивы ''%%ARGS%%'' и ''%%RESULT%%'' этой локации уничтожаются. | На каждой локации автоматически создаются свои собственные уникальные массивы ''%%ARGS%%'' и ''%%RESULT%%'', поэтому значения в этих массивах для каждой локации будут свои собственные. После выполнения кода локации, вызванной по ''%%FUNC%%'', массивы ''%%ARGS%%'' и ''%%RESULT%%'' этой локации уничтожаются. | ||
- | Обратите внимание! Значения из массивов ''%%ARGS%%'' и ''%%RESULT%%'' с локации, вызванной через ''%%FUNC%%'', не транслируются в блоки ''%%ACT%%''. В блоки ''%%ACT%%'' транслируются значения ''%%ARGS%%'' и ''%%RESULT%%'' из текущей локации, т.е. локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%''/''%%XGOTO%%''. | + | Обратите внимание! Значения из массивов ''%%ARGS%%'' и ''%%RESULT%%'' с локации, вызванной через ''%%FUNC%%'', не транслируются в блоки ''%%ACT%%'' и гиперссылки. В блоки ''%%ACT%%'' и гиперссылкитранслируются значения ''%%ARGS%%'' и ''%%RESULT%%'' из текущей локации, т.е. локации, на которую был осуществлён переход с помощью операторов ''%%GOTO%%''/''%%XGOTO%%''. |
Примеры: | Примеры: | ||
Строка 290: | Строка 352: | ||
</sxh> | </sxh> | ||
- | ===== Ранний выход. Оператор EXIT ===== | + | ==== Неявный вызов функции FUNC ==== |
- | + | ||
- | Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''%%GOSUB%%'' или ''%%FUNC%%'' локации, используйте оператор ''%%EXIT%%''. | + | |
- | + | ||
- | ''%%EXIT%%'' - завершение выполнения текущего кода (преждевременный выход из подпрограммы/обработчика какого-либо события). | + | |
- | + | ||
- | Пример: | + | |
- | + | ||
- | <sxh qsp> | + | |
- | if args[0] = 0: exit | + | |
- | </sxh> | + | |
- | + | ||
- | ===== Неявный вызов функции FUNC ===== | + | |
Вы можете не прописывать всякий раз функцию ''%%FUNC%%'' явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: | Вы можете не прописывать всякий раз функцию ''%%FUNC%%'' явно. Можно использовать более простую запись. Вот как это выглядит в общем виде: | ||
Строка 319: | Строка 369: | ||
* Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных. | * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных. | ||
* Аргументы, передаваемые на локацию, всегда должны заключаться в скобки | * Аргументы, передаваемые на локацию, всегда должны заключаться в скобки | ||
- | * Если на локацию не нужно передавать аргументы, после её названия можно поставить пустые скобки, а можно не ставить. | + | * Если на локацию не нужно передавать аргументы, после её названия можно поставить пустые скобки, а можно не ставить совсем. |
* Нельзя подставить вместо названия локации значение переменной! | * Нельзя подставить вместо названия локации значение переменной! | ||
Строка 337: | Строка 387: | ||
! пример вложения функций и участие их в выражениях | ! пример вложения функций и участие их в выражениях | ||
point = @queue.addPoint($next[i],new_cost+@hevr.est($next[i],$args[0])) | point = @queue.addPoint($next[i],new_cost+@hevr.est($next[i],$args[0])) | ||
+ | |||
+ | ! пример генерации гиперссылки с помощью локации-функции: | ||
+ | @html.link('Информация об игре', {goto 'game_info'}) + @BR | ||
+ | ! локация-функция BR не принимает аргументов...........^^^ | ||
</sxh> | </sxh> | ||
- | Если подобный неявный вызов сочетается с использованием неявного оператора, а на локации при этом НЕ присваивается значение переменной ''%%RESULT%%'', можно использовать неявный вызов функции вместо оператора ''%%GOSUB%%'': | + | Если подобный неявный вызов сочетается с использованием неявного оператора, а на локации при этом НЕ присваивается значение переменной ''%%RESULT%%'', неявный вызов функции будет работать как ''%%GOSUB%%'': |
Локация ''%%"поднять_яблоко"%%'': | Локация ''%%"поднять_яблоко"%%'': | ||
Строка 358: | Строка 412: | ||
@поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB | @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB | ||
end | end | ||
+ | </sxh> | ||
+ | |||
+ | ===== Ранний выход. Оператор EXIT ===== | ||
+ | |||
+ | Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''%%GOSUB%%'' или ''%%FUNC%%'' локации, используйте оператор ''%%EXIT%%''. | ||
+ | |||
+ | ''%%EXIT%%'' - завершение выполнения текущего кода (преждевременный выход из подпрограммы/обработчика какого-либо события). | ||
+ | |||
+ | Пример: | ||
+ | |||
+ | <sxh qsp> | ||
+ | if args[0] = 0: exit | ||
</sxh> | </sxh> | ||