Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

Операции

[:faq_80_01_00]Список операций для плеера версии 5.7.0 в порядке возрастания приоритета:

`&`

`OR`

`AND`

`OBJ`, `LOC`, `NO`

`=`, `<`, `>`, `!`, `<>`, `<=`, `>=`, `=<`, `=>`

`+`, `-`

`MOD`

`*`, `/`

`+`, `-` (унарные)

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

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

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

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

В более новых версиях плеера приоритет некоторых операций изменён.

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

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

[#выражение 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+=" (может быть тут что-то написано)"

P.S.: Инкремент — во многих языках программирования это операция, которая выполняет увеличение переменной. Чаще всего под инкрементом подразумевается увеличение переменной на 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

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

- и + (унарные)

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

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

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

Примеры:

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

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

/ (деление)

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

[#выражение 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")

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

! на экран будет выведена строка "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 (ложь)

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

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

NO

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

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

Если `[#выражение]` верно, то всё выражение неверно, и наоборот.

Пример:

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

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

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 (ложь)