Roll App

учебник Roll App

Формулы без проб и ошибок

Формулы связывают счётчики и автоматически пересчитывают результат. Ниже — весь поддерживаемый синтаксис языка формул версии 1 и примеры, которые можно вставить в шаблон.

01 · быстрый старт

Первая формула за три шага

1

Откройте шаблон

Создайте новый шаблон или откройте существующий, добавьте числовой счётчик и найдите поле «Стартовое значение».

2

Сошлитесь на данные

Введите @ — редактор предложит счётчики и доступные системные значения. Выберите подсказку, чтобы не ошибиться в имени.

3

Сохраните и проверьте

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

02 · данные шаблона

Ссылки и системные значения

Ссылки начинаются с @ и получают актуальные данные партии.

@Имя счётчика

текущее значение обычного или глобального счётчика

@"Счёт - основной"

безопасная запись имени со знаками препинания

@Роль.value1

первый вариант спискового счётчика; value2 — второй и так далее

@кости

результат костей; доступен, только когда кости включены в шаблоне

@числ_игроков

количество игроков

@пред_значение

локализованная запись @system.prev_value

03 · синтаксис

Поддерживаемые операторы

Арифметика

+ −
сложение, вычитание и знаки числа
* / %
умножение, деление и остаток от деления
^
степень для чисел; исключающее ИЛИ для логических значений
( )
явный порядок вычисления

Сравнение

= ==
равно
!= <>
не равно
> <
больше и меньше
>= =>
больше или равно
<= =<
меньше или равно

Логика и условия

!
логическое НЕ
& &&
логическое И
| ||
логическое ИЛИ
^
исключающее ИЛИ для логических значений
условие ? да : нет
выбор одного из двух результатов

04 · справочник

Все функции

abs(value)

модуль числа

min(value, …)

наименьшее значение

max(value, …)

наибольшее значение

sum(value, …)

сумма значений

avg(value, …)

среднее арифметическое; average — совместимый псевдоним

round(value, digits?)

округление; digits от −12 до 12

floor(value)

округление вниз

ceil(value)

округление вверх

trunc(value)

отбрасывание дробной части

sign(value)

знак числа: −1, 0 или 1

sqrt(value)

квадратный корень неотрицательного числа

pow(value, exponent)

возведение в степень

clamp(value, min, max)

ограничение числа заданным диапазоном

approx(left, right, tolerance?)

приблизительное сравнение дробных чисел

if(condition, true, false)

выбор результата по условию

switch(value, case, result, …, fallback)

выбор результата из нескольких вариантов

05 · готовые решения

Примеры для шаблона

Итоговые очки

Пересчитывает итог после изменения любого из трёх счётчиков.

@Очки + @Бонус - @Штраф

Значение в диапазоне

Не позволяет результату стать меньше 0 или больше 100.

clamp(@Здоровье, 0, 100)

Бонус по условию

Возвращает 3 при десяти очках и больше, иначе 1.

@Очки >= 10 ? 3 : 1

Таблица результатов

Проверяет диапазоны слева направо: +0 означает не больше 0, 1-3 — включительно, 6+ — не меньше 6.

switch(@Бросок, +0:-1, 1-3:1, 4-5:2, 6+:3)

Предыдущее значение

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

@system.prev_value + @Раунд

Локальная переменная

Переменная var доступна только внутри этой формулы.

var base = @Очки + @Бонус; round(base / 2)

06 · без сюрпризов

Что важно знать

  • True, False, Истина и Ложь — поддерживаемые логические значения. В числовой арифметике они ведут себя как 1 и 0.
  • Десятичную запятую можно использовать в обычном выражении: 1,5 + 1. В вызовах функций запятая разделяет аргументы, поэтому дроби внутри функций записывайте через точку: round(2.345, 2).
  • global name = expression и global var name = expression создают переменную, доступную другим формулам этого шаблона. Имена переменных пишутся латиницей, цифрами и знаком подчёркивания и не начинаются с цифры.
  • Циклы for и while, произвольный JavaScript, доступ к устройству и неизвестные функции запрещены. Вычислитель ограничивает глубину и сложность выражения, чтобы импортированный шаблон не мог зависнуть.
  • Для дробных значений используйте approx(left, right, tolerance), если важно сравнение с допуском. Точное равенство 0.1 + 0.2 == 0.3 может быть ложным из-за устройства дробных чисел.