Skip to main content

Операции

Список операций для плеера версии 5.8.0 в порядке возрастания приоритета:

  • OR
  • AND
  • NO
  • =, <, >, !, <>, <=, >=, =<, => (операции сравнения)
  • OBJ, LOC
  • & (конкатенация)
  • +, - (сложение, вычитание)
  • MOD
  • *, / (умножение, деление)
  • - (унарный минус)
  • ([выр]) - выражения в скобках

Операции записанные на одной строке имеют одинаковый приоритет и выполняются по порядку слева направо, если присутствуют на одном уровне в выражении.

Операции в скобках имеют приоритет перед другими операциями.

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

Верным считается числовое выражение, значение которого отлично от 0. При значении 0 выражение считается ложным. Для значения "верно" настоятельно рекомендуется использовать 1, т.к. только в этом случае будут адекватно работать побитовые операторы в роли логических.

5.7.0

В более старых версиях плееров порядок приоритета был иной.

  • &
  • OR
  • AND
  • OBJ, LOC, NO
  • =, <, >, !, <>, <=, >=, =<, =>
  • +, -
  • MOD
  • *, /
  • +, - (унарные)

* (умножение)

* — арифметическая операция "УМНОЖЕНИЕ". Перемножает два числа. Общая запись:

[#выражение 1] * [#выражение 2]

, где [#выражение 1] и [#выражение 2] — два любых числовых значения, или выражения. Результатом работы операции является произведение двух чисел.

Примеры:

2 * 2 & ! вернёт 4
4 * 2 & ! вернёт 8
17 * 5 & ! вернёт 85
37 * 100 & ! вернёт 3700

*= (умножение-присвоение)

*= — операция "УМНОЖЕНИЕ-ПРИСВОЕНИЕ". Сочетает в себе операции присвоения и умножения. Умножает значение указанной переменной на определённое число и возвращает результат той же переменной. Общая запись:

ИМЯ_МАССИВА *= [#выражение 1]

, где ИМЯ_МАССИВА — это название переменной (без кавычек), или название массива с указанием ячейки, а [#выражение 1] — любое числовое значение или выражение.

Аналогично конструкции:

ИМЯ_МАССИВА = ИМЯ_МАССИВА*[#выражение 1]

Пример:

! мы заменяем две операции: присвоения и умножение
warrior = warrior * 2
! на умножение-присвоение (действие аналогично)
warrior *= 2

+ (сложение)

+ — арифметическая операция "СЛОЖЕНИЕ". Суммирует два числа. Общая запись:

[выражение 1]+[выражение 2]

, где [выражение 1] и [выражение 2] — два любых значения, или выражения. Результатом работы операции является сумма двух значений.

Примеры:

2+2 & ! вернёт 4
4+2 & ! вернёт 6
17+5 & ! вернёт 22
37+100 & ! вернёт 137

Можно "суммировать" и текстовые значения. В этом случае операция работает как конкатенация:

! на экран будет выведена строка "2627"
"26"+"27"

+= (сложение-присвоение)

+=, (инкремент) — операция "ИНКРЕМЕНТ", сочетающая в себе операции присвоения и сложения. Прибавляет к текущему значению переменной указанное значение. Общая запись:

ИМЯ_МАССИВА += [выражение 1]

, где ИМЯ_МАССИВА — это название переменной (без кавычек), или название массива с указанием ячейки, а [выражение 1] — любое значение или выражение.

Аналогично конструкции:

ИМЯ_МАССИВА = ИМЯ_МАССИВА + [выражение 1]

Пример:

! мы заменяем две операции: присвоения и сложения
warrior = warrior + 15
! на инкремент (действие аналогично)
warrior += 15

Возможно так же проводить инкремент со строковыми значениями, работает как конкатенация:

$text += " (может быть тут что-то написано)"
note

Инкремент — во многих языках программирования это операция, которая выполняет увеличение переменной. Чаще всего под инкрементом подразумевается увеличение переменной на 1.

- (вычитание)

- — арифметическая операция "ВЫЧИТАНИЕ". Вычитает одно число из другого. Общая запись:

[выражение 1] - [выражение 2]

, где [выражение 1] и [выражение 2] — два любых значения, или выражения. Результатом работы операции является разность двух значений.

Примеры:

2 - 2 & ! вернёт 0
4 - 2 & ! вернёт 2
17 - 5 & ! вернёт 12
37 - 100 & ! вернёт -63

-= (вычитание-присвоение)

-=, (декремент) — операция "ДЕКРЕМЕНТ", сочетающая в себе операции присвоения и вычитания. Вычитает из текущего значения переменной указанное значение. Общая запись:

ИМЯ_МАССИВА -= [#выражение 1]

, где ИМЯ_МАССИВА — это название переменной (без кавычек), или название массива с указанием ячейки, а [#выражение 1] — любое числовое значение или выражение.

Аналогично конструкции:

ИМЯ_МАССИВА = ИМЯ_МАССИВА - [#выражение 1]

Пример:

! мы заменяем две операции: присвоения и вычитания
warrior = warrior - 15
! на декремент (действие аналогично)
warrior -= 15
note

Декремент — во многих языках программирования это операция, которая выполняет уменьшение переменной. Чаще всего под декрементом подразумевается уменьшение переменной на 1.

- (унарный минус)

унарный - — унарная операции. Общая запись:

-[#выражение]

, где [#выражение] — любое числовое значение или выражение. Результатом работы этой операций является то же самое значение, только с противоположным знаком.

Примеры:

-2 & ! вернёт -2
-(3+6) & ! вернёт -9
-(-27) & ! вернёт 27
5.7.0

В более ранних версиях плеера существовала операция "унарный плюс":

+(6+7)

По сути, она ничего не делала, поэтому было решено от неё отказаться.

/ (деление)

/ — арифметическая операция "ДЕЛЕНИЕ". Общая запись:

[#выражение 1] / [#выражение 2]

, где [#выражение 1] и [#выражение 2] — два любых числовых значения, или выражения. Значение [#выражение 2] не должно быть равным нулю. Результатом работы операции является частное от деления двух чисел.

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

Примеры:

2 / 2 & ! вернёт 1
4 / 2 & ! вернёт 2
17 / 5 & ! вернёт 3
37 / 100 & ! вернёт 0

/= (деление-присвоение)

/= — операция "ДЕЛЕНИЕ-ПРИСВОЕНИЕ". Сочетает в себе операции присвоения и деления. Делит значение указанной переменной на определённое число и возвращает результат той же переменной. Общая запись:

ИМЯ_МАССИВА /= [#выражение 1]

, где ИМЯ_МАССИВА — это название переменной (без кавычек), или название массива с указанием ячейки, а [#выражение 1] — любое числовое значение или выражение.

Аналогично конструкции:

ИМЯ_МАССИВА = ИМЯ_МАССИВА / [#выражение 1]

Пример:

! мы заменяем две операции: присвоения и деления
warrior = warrior / 2
! на деление-присвоение (действие аналогично)
warrior /= 2

< (меньше)

< — операция сравнения "МЕНЬШЕ". Общая запись:

[выражение_1] < [выражение_2]

Если значение выражения [выражение_1] меньше значения выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго.

Примеры:

! 2 меньше 4 — вернёт 1
2 < 4
! 5 не меньше 5 — вернёт 0
5 < 5
! 7 не меньше 3 — вернёт 0
7 < 3

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"a" < "z"         & ! верно
"z" < "zz" & ! верно
"aaaaaa" < "z" & ! верно

<= (меньше либо равно)

<= — операция сравнения "МЕНЬШЕ ЛИБО РАВНО". Общая запись:

[выражение_1] <= [выражение_2]

Если значение выражения [выражение_1] меньше либо равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго, либо равно ему.

Примеры:

! 2 меньше 4 — вернёт 1
2 <= 4
! 5 равно 5 — вернёт 1
5 <= 5
! 7 не меньше трёх и не равно ему
7 <= 3 & ! вернёт 0

Аналогично "=<" и конструкциям:

([выражение_1] < [выражение_2]) or ([выражение_1] = [выражение_2])

no [выражение_1] > [выражение_2]

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"a" <= "z"    & ! верно
"z" <= "zz" & ! верно
"aaaaaa" <= "z" & ! верно
"z" <= "z" & ! верно

<> (не равно)

<> — операция сравнения "НЕ РАВНО". Общая запись:

[выражение_1] <> [выражение_2]

Если значение выражения [выражение_1] не равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если выражения не равны.

Аналогично "!", или конструкции:

no [выражение_1] = [выражение_2]

Примеры:

! 2 не равно 4 — вернёт 1
2 <> 4
! 5 равно 5 — вернёт 0
5 <> 5

Можно сравнивать и строковые значения:

"abc" <> "def" & ! вернёт 1
"abc" <> "abc" & ! вернёт 0

= (равно)

= — операция сравнения "РАВНО". Общая запись:

[выражение_1] = [выражение_2]

Если значение выражения [выражение_1] равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если выражения равны.

Аналогично конструкции:

no [выражение_1] <> [выражение_2]

Примеры:

! 2 не равно 4 — вернёт 0
(2 = 4)
! 5 равно 5 — вернёт -1
(5 = 5)

Можно сравнивать и строковые значения:

("abc" = "def") & ! вернёт 0
("abc" = "abc") & ! вернёт -1
Внимание!

Не путайте с операцией присвоения.

= (присвоение)

= — операция присвоения. Общая запись:

ИМЯ_МАССИВА = [значение]

, где ИМЯ_МАССИВА — название переменной (не в кавычках), или название массива с указанием ячейки (не в кавычках), [значение] — любое значение или выражение.

Примеры:

! переменной BOX присваиваем значение 13
BOX = 13
! переменной $text присваиваем значение "Строка текста"
$text = "Строка текста"
! нулевой ячейке массива day присваивается значение 365
day[0] = 365

Имена строковых переменных/массивов должны начинаться с символа $.

Внимание!

Операцию присвоения не следует путать с операцией сравнения "РАВНО", хотя они очень похожи:

! операция присвоения
alukard = 1000
! операция сравнения
(alukard = 1000)

В этом случае плеер понимает, что внутри скобок находится операция сравнения, потому что скобки используются для записи выражений. Запись:

"abc" = "abc"

синтаксически ошибочна. Плеер выдаст ошибку: недопустимое название переменной/массива. Так как в этом случае он не понимает, что это операция сравнения.

Если перед операцией сравнения стоит оператор, скобки можно не писать:

if alukard = 150: *pl "Не хватает сил"

=< (равно либо меньше)

=< — операция сравнения "РАВНО ЛИБО МЕНЬШЕ". Общая запись:

[выражение_1] =< [выражение_2]

Если значение выражения [выражение_1] меньше либо равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое меньше второго, либо равно ему.

Примеры:

! 2 меньше 4 — вернёт 1
2 =< 4
! 5 равно 5 — вернёт 1
5 =< 5
! 7 не меньше трёх и не равно ему
7 =< 3 & ! вернёт 0

Аналогично "<=" и конструкциям:

([выражение_1] < [выражение_2]) or ([выражение_1] = [выражение_2])

no [выражение_1] > [выражение_2]

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"a" =< "z"    & ! верно
"z" =< "zz" & ! верно
"aaaaaa" =< "z" & ! верно
"z" =< "z" & ! верно
Внимание!

Данная запись, хотя и допустима в QSP, к использованию не рекомендуется. Используйте "<= (меньше либо равно)" вместо этого.

=> (равно или больше)

=> — операция сравнения "РАВНО ИЛИ БОЛЬШЕ". Общая запись:

[выражение_1] => [выражение_2]

Если значение выражения [выражение_1] больше либо равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго, либо равно ему.

Примеры:

! 2 не меньше и не равно 4 — вернёт 0
2 => 4
! 5 равно 5 — вернёт 1
5 => 5
! 7 больше 3
7 => 3 & ! вернёт 1

Аналогично ">=" и конструкциям:

([выражение_1] > [выражение_2]) or ([выражение_1] = [выражение_2])
no [выражение_1] < [выражение_2]

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"z" => "a"    & ! верно
"zz" => "z" & ! верно
"z" => "aaaaaa" & ! верно
"z" => "z" & ! верно
Внимание!

Данная запись, хотя и допустима в QSP, к использованию не рекомендуется. Используйте ">= (больше либо равно)" вместо этого.

> (больше)

> — операция сравнения "БОЛЬШЕ". Общая запись:

[выражение_1] > [выражение_2]

Если значение выражения [выражение_1] больше значения выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго.

Примеры:

! 2 не больше 4 — вернёт 0
2 > 4
! 5 не больше 5 — вернёт 0
5 > 5
! 7 больше 3 — вернёт 1
7 > 3

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"z" > "a"         & ! верно
"zz" > "z" & ! верно
"z" > "aaaaaa" & ! верно

>= (больше либо равно)

>= — операция сравнения "БОЛЬШЕ ЛИБО РАВНО". Общая запись:

[выражение_1] >= [выражение_2]

Если значение выражения [выражение_1] больше либо равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если первое больше второго, либо равно ему.

Примеры:

! 2 не меньше и не равно 4 — вернёт 0
2 >= 4
! 5 равно 5 — вернёт 1
5 >= 5
! 7 больше 3
7 >= 3 & ! вернёт 1

Аналогично "=>" и конструкциям:

([выражение_1] > [выражение_2]) or ([выражение_1] = [выражение_2])
no [выражение_1] < [выражение_2]

Сравнивать можно и текстовые значения, при этом символы сравниваются поочерёдно, и большим считается символ, стоящий ближе к концу алфавита.

"z" >= "a"    & ! верно
"zz" >= "z" & ! верно
"z" >= "aaaaaa" & ! верно
"z" >= "z" & ! верно

! (не равно)

! — операция сравнения "НЕ РАВНО". Общая запись:

[выражение_1]![выражение_2]

Если значение выражения [выражение_1] не равно значению выражения [выражение_2] операция вернёт 1, в противном случае вернёт 0. Иными словами: верно, если выражения не равны.

Аналогично "<>", или конструкции:

no [выражение_1] = [выражение_2]

Примеры:

! 2 не равно 4 — вернёт 1
2 ! 4
! 5 равно 5 — вернёт 0
5 ! 5
Внимание!

Не путайте с оператором комментария.

Для улучшения читаемости кода используйте <>.

& (конкатенация)

& — конкатенация, операция объединения строковых выражений. Общая запись:

[$выражение 1] & [$выражение 2]

Не путайте с символом перечисления команд:

! в данном случае на экран будут последовательно выведены строки "26" и "27"
"26" & "27"
! в данном случае на экран будет выведена строка "2627"
("26" & "27")
tip

Не рекомендуется использовать данную операцию для объединения строк, поскольку строки можно объединять через +:

! на экран будет выведена строка "2627"
"26"+"27"

Такая запись создаёт меньше путаницы и работает аналогичным образом.

AND

AND — логическое "И". Общая запись:

[#выражение 1] AND [#выражение 2]

Всё данное выражение будет верным, если верны выражения [#выражение 1] и [#выражение 2].

Примеры:

! обе части выражения верны, значит и всё выражение верно
(2 = 2) and (3 <> 2) & ! выражение вернёт 1 (правда)
! одна часть выражения не верна, значит всё выражение неверно
(2 <> 2) and (3 <> 2) & ! выражение вернёт 0 (ложь)
! обе части выражения не верны, значит и всё выражение не верно
(2 <> 2) and (3 = 2) & ! выражение вернёт 0 (ложь)
5.7.0

В старых версиях плеера операция была побитовой.

LOC

LOC — операция проверяет наличие локации и возвращает 1, если локация есть, и — 0, если локации нет. Общая запись:

LOC([$локация])

, где [$локация] — название локации, наличие которой необходимо проверить в игре. Выражение верно, если локация существует в игре.

Примеры:

! проверяет, есть ли в игре локация "начало"
loc("начало") & ! если локация есть, возвращает 1

! если локация "улица" не добавлена в игру
if loc("улица") = 0:
act "Выйти на улицу": *pl "Я не могу выйти на улицу, дверь не отпирается."
end

MOD

MOD — операция вычисляет остаток от деления двух чисел. Общая запись:

[#выражение 1] MOD [#выражение 2]

, где [#выражение 1] — делимое, [#выражение 2] — делитель.

Примеры:

! 4 делится на 2 нацело
4 mod 2 & ! возвращает 0
! 5 не делится на 2 нацело
5 mod 2 & ! возвращает 1
! 13 не делится на 10 нацело
13 mod 10 & ! возвращает 3
note

Остаток от деления отрицательного числа будет отрицательным числом.

NO

NO — операция отрицания. Общая запись:

NO [#выражение]

Если [#выражение] верно, то всё выражение неверно, и наоборот. Иными словами, возвращает 0, если значение выражения отлично от нуля, и возвращает 1, если значение выражения равно 0.

Пример:

! 4 равно 4 это верно, значит всё выражение неверно
no 4 = 4 & ! вернёт 0 (ложь)
! можно читать как вопрос: четыре не равно четырём? Нет — ложь.

! то, что 5 равно 3, — неверно, значит всё выражение верно
no 5 = 3 & ! вернёт 1 (правда)
! можно читать как вопрос: пять не равно трём? Да — правда.
5.7.0

В старых версиях плеера операция была побитовой.

OBJ

OBJ — операция проверяет наличие предмета в инвентаре и возвращает 1, если предмет есть, и — 0, если предмета нет. Общая запись:

OBJ([$название])

, где [$название] — название предмета, наличие которого необходимо проверить в окне предметов. Выражение верно, если предмет добавлен в окно предметов.

Примеры:

! проверяет, добавлен ли в окно предметов предмет "Отвёртка"
obj("Отвёртка") & ! если предмет есть, возвращает 1

! в зависимости от наличия того или иного предмета
! выводится то или иное действие
if obj("Полный кувшин") = 1:
act "Опустошить кувшин":
delobj "Полный кувшин"
addobj "Пустой квушин"
goto $curloc
end
elseif obj("Пустой кувшин") = 1:
act "Наполнить кувшин":
addobj "Полный кувшин"
delobj "Пустой квушин"
goto $curloc
end
end

OR

OR — логическое "ИЛИ". Общая запись:

[#выражение 1] OR [#выражение 2]

Всё данное выражение будет верным, если хотя бы одно из выражений [#выражение 1] и [#выражение 2] верно.

Примеры:

! обе части выражения верны, значит и всё выражение верно
(2 = 2) or (3 <> 2) & ! выражение вернёт 1 (правда)
! одна часть выражения верна, значит всё выражение верно
(2 <> 2) or (3 <> 2) & ! выражение вернёт 1 (правда)
! обе части выражения не верны, значит и всё выражение не верно
(2 <> 2) or (3 = 2) & ! выражение вернёт 0 (ложь)
5.7.0

В старых версиях плеера операция была побитовой.