Условные выражения и переходы

Содержание  Previous  Next

IF [#выражение]:[оператор1] & [оператор2] & ... ELSE [оператор3] & [оператор4] & ... - если [#выражение] верно (не равно 0), то выполнить заданные операторы до ключевого слова "ELSE", иначе выполнить операторы после "ELSE".

Если ключевое слово "ELSE" не указано, то при верном значении [#выражение], выполняются все операторы, находящиеся после символа ":".

Примеры:

 

 if ((a+b)/c)=45+54 or (b<5 or c>45) and no obj 'лопата' and $f=$vvv+'RRRRR':p 'OK' & goto 'Next'

 if был_здесь[$curloc]:exit

 if a<3:jump 'sss'

 if $имя = '':msg 'Введите имя!' & jump 'ввод'

 if a+b=2:c=30 & gt 'next' else c=10

 

Также см. раздел "Многострочные IF / ACT".

 

EXIT - завершение выполнения текущего кода (преждевременный выход из подпрограммы / обработчика какого-либо события...).

 

JUMP [$выражение] - переход в текущем коде (при обработке локации / выбора действия) на метку [$выражение]. Метка на локации обозначается как ":[название метки]". После описания метки (через "&") могут идти операторы. Если интерпретатор находит случайную метку, то он её просто игнорирует. Например:

 

 jump 'КонеЦ'

 p 'Это сообщение не будет выведено'

 :конец

 p 'А это сообщение пользователь увидит'

 

С помощью оператора "JUMP" можно организовывать циклы:

 

 s=0

 :loop

 if s<9:

         s=s+1

         pl s

         jump 'LOOP'

 end

 p 'Всё!'

 

Оператор "JUMP" также полезен во время отладки квеста, чтобы "обойти" группу операторов, которые временно не нужны.

 

GOSUB [$выражение],[параметр 1],[параметр 2], ... или GS [$выражение],[параметр 1],[параметр 2], ... - обработка локации с названием [$выражение]. Базовое описание локации добавляется к текущему описанию, базовые действия добавляются к текущим действиям, и происходит выполнение операторов в поле "Выполнить при посещении", затем возврат на исходную строку (продолжение выполнения программы).

Переданные параметры хранятся в массиве ARGS. После обработки локации предыдущие значения ARGS восстанавливаются. Примеры:

 

 GS 'ход' - обработка локации "ход". Массив ARGS пуст.

 GS $loc,1 - обработка локации, название которой хранится в $loc с передачей одного параметра. ARGS[0] равен 1.

 GS 'ход',$var,2,'данные' - обработка локации "ход" с передачей 3-х параметров. $ARGS[0] равен значению $var, ARGS[1] равен 2, $ARGS[2] содержит строку "данные".

 

GOTO [$выражение],[параметр 1],[параметр 2], ... или GT [$выражение],[параметр 1],[параметр 2], ... - переход на локацию с названием [$выражение]. Поле основного описания локации, а также список текущих действий заменяются описанием и действиями новой локации.

Переданные параметры хранятся в массиве ARGS. Примеры:

 

 GT 'локация' - переход на локацию "локация". Массив ARGS пуст.

 GT 'локация',1,'данные' - переход на локацию "локация" с передачей 2-х параметров. ARGS[0] равен 1, $ARGS[1] содержит строку "данные".

 

См. также локацию-обработчик перехода на новую локацию.

 

XGOTO [$выражение],[параметр 1],[параметр 2], ... или XGT [$выражение],[параметр 1],[параметр 2], ... - отличается от "GOTO / GT" тем, что при переходе не очищается поле основного описания локации, а базовое описание новой локации добавляется к текущему основному описанию. Тем не менее, список действий заменяется действиями новой локации. См. также локацию-обработчик перехода на новую локацию.

 

PS:

При обработке локаций по GOSUB, а также локаций, на которые указывают пункты пользовательского меню и системные переменные ($COUNTER, $USERCOM, $ONGLOAD, $ONGSAVE, $ONNEWLOC, $ONACTSEL, $ONOBJSEL, $ONOBJADD, $ONOBJDEL), учитываются базовые описания и действия на локациях (при отсутствии действий с такими же названиями - к текущим действиям добавляются базовые действия обрабатываемой локации, базовое описание локации добавляется к текущему основному описанию). Аналогично, при вызовах XGOTO, к текущему основному описанию добавляется базовое описание локации, на которую произошёл переход.