Table of content

DiceParser: что это такое?

DiceParser — программный компонент, предназначенный для броска костей с помощью простых команд. Этот программный компонент доступен на разных платформах.
Например: бот Discord, встроенный в Rolisteam, в Twitter и т. д.

О примерах в этой документации

Для ясности: во всех примерах этой документации начальный префикс не показан. Не забудьте добавить нужный префикс в зависимости от того, где выполняется команда броска костей: Rolisteam, Discord, IRC… Если не знаете, попробуйте !. Префикс позволяет системе распознать команду.

Бросок кости

Всё очень просто. Нужно вызвать:

!1d6

Первое число — количество костей, которое нужно бросить. Второе число — количество граней.

Примеры

!1d6

Бросок одной шестигранной кости.

!1d10

Бросок одной десятигранной кости.

!5d10

Бросок пяти десятигранных костей.

!777d6

Бросок 777 шестигранных костей.

Благодаря ряду операций и параметров можно немного настроить команду броска: см. Список операторов.

Бросок костей в диапазоне

!4d[-1..1]

Бросок 4 костей со значениями от -1 до 1 (система Fudge/Fate).

!3d[0..9]

Бросок 3 костей с 10 гранями, начиная с 0.

!3d[-20..-9]

Бросок 3 костей, значения в диапазоне от -20 до -9.

Инструкции

Сложить (или выполнить любые другие арифметические действия) результаты бросков двух (или более) видов костей несложно:

!1d10+1d8

Показать все результаты, не выполняя над ними никаких действий. Несколько инструкций разделяются символом ;.

!1d10;1d6 # 2 instructions

или

!5d6;1d10;4d100;3d20  # 4 instructions

Так можно выполнять вычисления, если результат первой инструкции удовлетворяет условию, и так далее. Например, если первой инструкцией бросается атака, а второй — урон, то в третьей можно сравнить результат атаки и проверить, успешна ли она. Можно вывести:

см. подробнее

Объединить

Можно объединить все инструкции в одну большую. Для этого предназначен оператор merge. Он полезен, когда нужно обработать все результаты броска костей как единый результат.

Например, если нужно оставить наибольшее значение среди d6 и d8.

!d6;d8mk1

Подробнее об операторе k — в разделе Список операторов.

Вычисление между инструкциями

Благодаря системе переменных можно ссылаться на результат конкретной инструкции.

  • Чтобы сослаться на первую инструкцию: $1
  • Чтобы сослаться на вторую инструкцию: $2
  • Для ссылки на третью инструкцию используется $3 и т. д. Количество инструкций не ограничено.
!8d10;$1c[>6];$1c1;$2-$3
  • Первая инструкция выполняет бросок 8 десятигранных костей.
  • Вторая инструкция подсчитывает, сколько костей со значением больше 6.
  • Третья инструкция подсчитывает количество костей, равных 1.
  • Четвёртая инструкция вычитает результат третьей инструкции из результата второй.

Список операторов

  • k: оставить
  • K: взорвать и оставить
  • kl: оставить наименьшие
  • s: сортировка
  • c: подсчёт
  • r: переброс
  • R: перебрасывать до
  • e: взорвать
  • a: перебросить и добавить
  • @: переход назад
  • p: раскрасить кости
  • m: объединить
  • i: условие
  • ;: следующая инструкция
  • g: группа
  • b: привязка
  • #: комментарий

Оставить

!kX

Параметр сортирует итоговый список костей и выбирает X наибольших.

Взорвать и оставить

!KX

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

Примеры

!6d10K4

Бросьте 6 десятигранных костей, каждая выпавшая 10 взрывается. Значение взорвавшихся костей превышает 10. Результат: 40 details: 23 [10,10,3],9,5,3,1,1

Другой способ записи этой команды:

!6d10e10k4

Этот способ позволяет изменить порог взрыва.

Чтобы вычислить количество сохраняемых костей, оператор k работает с переменными. Нельзя напрямую разместить вычисление после k, но можно сослаться на предыдущее вычисление.

# Good
!5-3;10d10k$1 
# BAD
!10d10k5-3
# BAD
!10d10k(5-3)

Оставить наименьшие

klX

Этот параметр сортирует итоговый список костей, а затем выбирает X наименьших.

Сортировка

!3D10s

Список костей отсортирован по убыванию.

!10d6sl

Выполняет бросок 6 костей с 6 гранями, после чего они сортируются по возрастанию.

Подсчёт

!3D10c[Validator]

Подсчитать, сколько костей удовлетворяют условию, и вывести число (подробнее о синтаксисе см. в разделе «Средство проверки»).

Перебросить

!3D10r[Validator]

Перебросить кость, если предыдущее значение соответствует средству проверки (подробнее о синтаксисе см. в разделе «Средство проверки»).

Перебрасывать до

!3D10R[Validator]

Работает как «Перебросить», но кости бросаются до тех пор, пока условие не станет ложным.

Взорвать

!3D10e[Validator]

Взорвать, пока значение соответствует средству проверки (подробнее о синтаксисе — в разделе «Средство проверки»).

!3D10e(3)[Validator]

У оператора взрыва можно задать ограничение на количество взрывов кости.

!3D10e(1d10)[Validator]

Ограничение задаётся выражением.

Примеры

!3D10e10

Пока значение кости равно 10, бросок повторяется, и его результат прибавляется к предыдущему значению кости.

Результат: 49 details: 8, 12 [10,2], 29 [10,10,9]

!3D10e[>8]

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

Результат: 35 details: 3, 27 [9,10,8], 5

Добавить

!3D10a[Validator]

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

Вхождение

!10d10o

Подсчитать и отсортировать вхождения каждого значения. Результат: 3x1,1x2,3x4,2x9,1x10 - [1,1,1,2,4,4,4,9,9,10]

!10d10o2,7

Подсчитать и отсортировать вхождения, если они встречаются не менее 2 раз, значение — 7 или больше. Результат: 2x8 - [1,2,3,5,6,7,8,8,9,10]

!10d10o2[<6]

Подсчитать и отсортировать вхождения, встречающиеся не менее 2 раз; значение должно удовлетворять средству проверки (здесь — меньше 6). Результат: 2x3,2x5 - [3,3,5,5,6,6,6,7,7,8]

Ошибки

!10d10o[<6]

Эта команда вызывает предупреждение: оператор occurrence может иметь 0 или 2 параметра, а одно средство проверки пока не поддерживается.

Переход назад

Этот оператор применяет следующий оператор к предпоследнему результату. Например:

!8D10c[>=7]+@c[=10]

c[=10] в этой команде подсчитывает количество 10 в результате 8D10; если убрать @, будет предпринята попытка подсчитать количество 10 в результате c[>=7]. Результат c[>=7] — скалярное число (1 или 2 … (максимальное значение 8)); это не список костей.

Раскрасить

!8D10p[1:blue]

Раскрасить первую кость в списке в синий цвет.

!8d10p[2:blue]

Раскрасить первые две кости в списке в синий цвет.

https://gist.github.com/obiwankennedy/62101383d411e55d205e44df78aa5299

Набор доступных цветов зависит от клиентского приложения DiceParser.

  • В Rolisteam можно задать название любого цвета Qt или шестнадцатеричный код цвета: #ff28AC.
  • Приложение командной строки поддерживает несколько цветов: чёрный, белый, синий, красный, чёрный, зелёный, жёлтый.

Фильтр

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

!4d6f[!=6]

Результат:

total: 11 - details[5 2 6 4]

6 игнорируется.

Объединить

Оператор merge используется для объединения нескольких результатов броска костей разных типов в один результат, после чего можно применить любой оператор.

!1d6;1d8mk1

Эта команда объединяет результаты d6 и d8. Затем к обоим результатам применяется оператор k, чтобы оставить лучший. Следует учитывать, что этот оператор объединяет список инструкций. Ссылки на инструкции (например, $1 и т. п.) не будут работать после оператора merge.

Развёртывание

Взорвавшиеся кости считаются новыми костями. Оператор вызывается символом y.

!4d6e6y6k3

Первый результат: 10 [6, 4], 3, 3, 2
Результат после развёртывания: 6, 4, 3, 2
Итоговый результат: 6+4+3 = 13

Все одинаковые

Этот оператор временный. Он предназначен для решения проблемы системы Tunnels and Trolls. Именно поэтому оператор-маркер — t. Кости взрываются, когда у всех костей одинаковое значение.

!2d6t
> # Explode twice because 2,1
Result: 12 - details:[2d6t (5 [2,1,2] 7 [2,1,4])]

> # Nothing happened
Result: 10 - details:[2d6t (4 6)]

Уникальные

Взорвавшиеся кости считаются новыми костями.

!4d6e6u

Результат: 6 4 3 3 2 Итоговый результат: 6+4+3 = 13

Список значений

Создайте собственный список значений и примените любой оператор костей.

![10,25,43,8]k1

Получение более высокого результата с помощью нескольких инструкций:

!1d10;2d6+9;1d20;[$1,$2,$3,$4]k1

Каждое значение преобразуется в кость.

Привязка

Оператор bind работает точно так же, как merge, но оставляет массив инструкций без изменений.

!2d8;2d12b;$2k2;$2k2kl1;"your total is $3 with lowest: $4"

Бросаем две восьмигранные кости и две двенадцатигранные, затем объединяем их результаты оператором bind. Из полученного результата оставляем 2 старшие кости, после чего выделяем меньшую из двух. В конце выводим результат внутри предложения.

Если

Оператор if позволяет выполнить одно действие, если выполняются некоторые условия. Оператор if имеет 2 обязательных параметра:

  • условие (см. средство проверки)
  • инструкция, выполняемая, если условие истинно.

Также имеются 2 необязательных параметра:

  • способ сравнения
  • инструкция, выполняемая при ложном условии.

i*[]{}{}

  • *: метод сравнения
  • []: средство проверки

Способ сравнения

Существует 4 способа сравнения.

  • Для каждой кости: условие проверяется для каждой кости из предыдущей части команды. [Способ по умолчанию]
  • Для каждого значения ?: условие проверяется для каждого конечного значения кости из предыдущей части команды.
  • Все кости *: чтобы сработала инструкция при истинном условии, все кости должны удовлетворять условию. Если не все кости удовлетворяют условию, выполняется инструкция при ложном условии.
  • Один из них .: чтобы сработала инструкция при истинном условии, хотя бы одна кость должна удовлетворять условию. Если ни одна кость не удовлетворяет условию, выполняется инструкция при ложном условии.
  • По скалярному значению :: условие вычисляется по скалярному результату броска костей.

Примеры:

!1d6i[<4]{3}

Если значение кости меньше 4, значение кости становится равным 3. (То есть 1, 2, 3 становятся 3).

!4d6e6i[=4]{-4}

Если значение кости равно 4, она удаляется. [Kuro System]

!4d6i.[=6]{+1d6}

Если хотя бы одна кость равна 6, бросается ещё один d6, и его результат прибавляется к итогу.

!4d6i*[=6]{+1d6}

Если все кости равны 6, бросается ещё один d6, и его результат прибавляется к итогу.

!2d10i:[>15]{"Success"}{"Fail"}

Если сумма двух костей больше 15, выводится «Успех», иначе — «Провал».

!2d10i:[>15]{"Success %1 "}{"Fail %1"}

То же, что выше, но итоговый результат показывается рядом с «Успех» или «Провал».

!2d10i:[>15]{"Success %1 [%2]"}{"Fail %1 [%2]"}

То же, что и выше, но результат каждой кости выводится в квадратных скобках.

Группа

Сгруппировать кости, затем подсчитать количество групп (система 7th Sea).

Сложный вывод

Оператор group может принимать параметр для включения сложного вывода. Такой вывод показывает каждую группу и все отложенные в сторону значения, если они есть. Чтобы включить этот вывод, требуется добавить s сразу после g. См. пример ниже:

Пример

!3d20g10

Будут брошены 3 кости, после чего предпринимается попытка сгруппировать их в группы по 10. Если выпадет 9 9 2, можно создать только одну группу, значение которой больше или равно десяти ({9,2}, вторая 9 остаётся «неиспользованной»).

Оператор g позволяет переупорядочивать кости для создания групп. При броске 4d20g10, если выпадает 7 4 3 6, результатом будет 2 ({7,3} и {6,4}).

!5d10gs10

Тогда итоговый вывод будет таким:

2 ({7,3}, {6,4} - [2])

{7,3} и {6,4} являются группами, а [2] оставлен в стороне.

Оператор выбора (S)

Оператор switch case позволяет преобразовать числовое значение в текст. Его цель — упростить это по сравнению с использованием нескольких if. Как и следовало ожидать, синтаксис близок к if.

!1d100S[<50]{"Low"}[>=50]{"Low"}

Также можно добавить параметр по умолчанию

!1d4S[=1]{"Low"}[=2]{"small"}[=3]{"medium"}{"big"}

Режим исключения: этот режим включается, когда за S следует ^.

!1d100S^[<25]{"Low"}[<50]{"small"}[<75]{"medium"}[>=75]{"big"}

Комментарий

!2D6 # Sword attack

Вывести «Атака мечом» и результат двух костей. DiceParser игнорирует всё, что идёт после #. Вся эта часть считается одним комментарием. Так DiceParser может ответить на вопрос:

!1L[yes,no] # Am I evil ?

Am I evil ? yes

Преобразовать

Преобразует кости в соответствии с условием в другое значение.

!5d10T[>5]{15}

Бросьте 5 костей с 10 гранями, затем замените все значения больше 5 на 15, а остальные — на 0.

(6,9,7,5,2) => (15,15,15,5,2)

Этот оператор принимает несколько условий: T[=5]{15}[=6]{16}

(6,9,7,5,2) => (16,9,7,15,2)

Можно также добавить завершающее выражение, чтобы изменить значение всех костей, не соответствующих условию: T[>5]{15}{0}

(6,9,7,5,2) => (15,15,15,0,0)

Функции

DiceParser предоставляет функции для работы с инструкциями. Некоторые функции появятся в ближайшее время (например: max, min). Это позволит управлять несколькими командами одновременно.

Повторение

!repeat(1d10,5)

Вывод:

2 - Details [2]
8 - Details [8]
3 - Details [3]
1 - Details [1]
10 - Details [10]

Внимание! Следует учитывать, что repeat плохо работает с командами, содержащими несколько инструкций.

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

  • 15/7 = 2.14286
  • Floor(15/7) = 2

Команда:

15/7;**floor($1)**;ceil($1);round($1)  
result: 2.14286,**2**,3,2

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

  • 15/7 = 2.14286
  • Ceil(15/7) = 3

Команда:

15/7;floor($1);**ceil($1)**;round($1)  
result: 2.14286,2, **3** ,2

Округление

  • 15/7 = 2.14286
  • Round(15/7) = 2

Команда:

15/7;floor($1);ceil($1);**round($1)**  
result: 2.14286,2,3, **2**

Вывод

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

Бросок:

"result"

Вывод: result

Внутри оператора if можно задать строковую инструкцию:

1d6i:[>3]{"Success"}{"Fail"}

Вывод: Success или Fail

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

Сокращения

Имеются 3 метки-сокращения.

  • %1: последний скалярный результат каждой инструкции.
  • %2: все результаты броска костей.
  • %3: последний скалярный результат последней инструкции.

По умолчанию вывод имеет вид %1 details[%2]. То есть показывается последний скалярный результат каждой инструкции и результат броска костей.

%1 и %3 эквивалентны, если инструкция только одна (без ;).

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

Итоговый результат

Также можно ссылаться на конечное значение конкретной инструкции (результат должен быть числом или строкой)

  • Чтобы сослаться на первую инструкцию: $1
  • Чтобы сослаться на вторую инструкцию: $2
  • Чтобы сослаться на третью инструкцию: $3

Количество инструкций не ограничено.

Строка как итоговый результат

Можно ссылаться на подрезультат строкового результата, добавив [x] после ссылки на инструкцию. Пример поможет разобраться.

!2Lu[cats,dogs,rats,rabbits,bats,squirrels]

Результат по умолчанию выглядит так:

cats,bats

Теперь нужно составить предложение из этого текста:

!2Lu[cats,dogs,rats,rabbits,bats,squirrels];"You love $1 and you are afraid of $1"

Поскольку $1 ссылается на «cats,bats», будет показано:

You love cats,bats and you are afraid of cats,bats

Итак, это не очень полезно. Чтобы немного улучшить ситуацию, нужно добавить несколько подындексов.

!2Lu[cats,dogs,rats,rabbits,bats,squirrels];"You love $1[0] and you are afraid of $1[1]"

Тогда вывод будет правильным.

You love cats and you are afraid of bats

Рассмотрим несколько примеров:

!8d10;$1c[>6];$1c1;$2-$3

По умолчанию вывод имеет вид: 45,4,0,4 details[4,3,10,7,2,2,7,10]

!8d10;$1c[>6];$1c1;$2-$3i:[>0]{"%3 Success[%2]"}{i:[<0]{"Critical fail %3 [%2]"}{"Fail %3 [%2]"}}

Вот пример вывода:

  • 4 Success[4,3,10,7,2,2,7,10]
  • Fail 0 [10,3,1,1,2,2,7,5] (2 успеха - 2 провала = 0)
  • Critical fail -2 [1,3,1,1,2,2,7,5] (1 успех - 3 провала = -2)

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

!8d10;$1c[>6];$1c1;$2-$3;$4i:[=0]{"Fail $4 [%2]"}{$4i:[>0]{"$2 Success[%2]"}{$2i:[=0]{"Critical Fail $4 [%2]"}{"Fail $4 [%2]"}}}

Ещё один пример, показывающий, как объединить строковый результат с результатом броска костей.

!1d6+1;1L[gold coins,spell scrolls,weapons];"You found $1 $2"

You found 5 gold coins

Результат броска костей

DiceParser предоставляет метки для показа результата броска (а также каждого выпавшего значения конкретной инструкции).

Для показа значений костей из конкретной инструкции достаточно добавить @ и номер инструкции (например, @1)

!2d6;3d8;"Result $2 - d8:[@2] - d6:[@1]"

Вывод:

Result 15 - d8:[7,4,4] - d6:[3,6]`

Новая строка

Может потребоваться вывести результат на несколько строк. Это совсем просто:

!1d100;1d10;"Attack: $1\nDamage: $2"

Эта команда выведет:

Attack: 31

Damage: 7

Арифметика

Rolisteam Dice Parser позволяет вычислять простейшие арифметические операции, такие как +, -, /, *, а также учитывает приоритет этих операторов и поддерживает скобки.

!8+8+8
Result: 24
!24-4
Result: 20
!(3+4)*2
Result: 14
!7/2
Result: 3.5
!15|6
Result: 2
!15/6
Result: 2.5

Бросьте 2 кости и прибавьте 3 к их сумме. Затем результат используется как количество костей для броска: !(3+2D6)D10

Арифметика и кости

Поддерживается выполнение арифметических операций над костями. Обратите внимание, что по умолчанию список костей преобразуется в скалярное число суммированием. Так, при броске 3d6 результатом будет список из 3 значений {2, 5 ,1}. Теперь рассмотрим немного изменённую команду 3d6+4: она вычисляется так: {2, 5 ,1} = 8; 8+4 = 12. Итоговый результат — 12.

  • !3d6+4 ⇾ Бросьте 3 кости, сложите результаты и прибавьте 4:
  • !10D10-2 ⇾ Бросьте 10 костей, сложите результаты, затем вычтите 2
  • !87-1D20 ⇾ Вычтите из 87 результат броска одной кости
  • !(6-4)D10 ⇾ Вычтите 4 из 6, затем бросьте две кости.
  • !1D10/2 ⇾ Разделите результат броска одной кости на 2.
  • !(2+2)**2 ⇾ Результат: 16
  • !1d10**2 ⇾ Бросьте 1d10, затем умножьте результат на самого себя.
  • !15|2 ⇾ Целочисленное деление 15 на 2. Результат: 7
  • !15/2 ⇾ Деление 15 на 2. Результат: 7.5

Средство проверки

Существует пять видов средств проверки:

  • Скаляр
  • Диапазон
  • Логическое выражение
  • Операция с условием
  • Составное

Любой оператор, которому требуется средство проверки (например, a,r,e,c), может использовать эти три вида.

Скаляр

Скалярное значение задаёт в качестве проверки равенство значения кости этому числу.

!4d10e10

Эта команда означает: бросить 4 кости, и они взрываются при выпадении 10.

Диапазон

Диапазон задаётся двумя границами. Нужно использовать квадратные скобки, а сами границы разделяются ...

!4d10c[8..10]
!1d[-1..8]

Логическое условие

Команда подсчитывает, сколько костей имеют значения от >=8 до <=10.

!4d10c[>7]

Команда подсчитывает, сколько костей выпало больше 7.

Оператор сравнения

Rolisteam Dice Parser позволяет использовать несколько логических операторов:

  • Равно: =
  • Больше или равно: >=
  • Меньше или равно: <=
  • Меньше: <
  • Больше: >
  • Не равно: !=

Способы сравнения

Как и для оператора if, можно указать способ сравнения.

  • Для каждой кости: условие проверяется для каждой кости из предыдущей части команды. [Способ по умолчанию]
  • Для каждого значения ?: условие проверяется для каждого конечного значения кости из предыдущей части команды.
  • Все кости *: чтобы сработала инструкция при истинном условии, все кости должны удовлетворять условию. Если не все кости удовлетворяют условию, выполняется инструкция при ложном условии.
  • Один из них .: чтобы сработала инструкция при истинном условии, хотя бы одна кость должна удовлетворять условию. Если ни одна кость не удовлетворяет условию, выполняется инструкция при ложном условии.
  • По скалярному значению :: условие вычисляется по скалярному результату броска костей.
Примеры:
!1L[7,8,9]c[>6]

Эта команда вернёт 0, так как ни одна кость не брошена, поэтому результат 1L[7,8,9] — конечное значение.

!1L[7,8,9]c[?>6]

Вывод: 1

!5d6e6sc[>=8]

Вывод:

0 details: [8 [6,2] 2 1 1 1]

!5d6e6f[?>=16]

Вывод: итоговая сумма равна 11. Она меньше 16, поэтому фильтр отфильтровывает всё.

0 details: [2 4 1 3 1]

Итоговая сумма больше 16, поэтому оператор filter принимает весь результат.

23 details: [3 6 3 5 6]

!5d6e6sc[:>=8]

Вывод:

1 details: [8 [6,2] 2 1 1 1]

Операция с условием

Это средство проверки предоставляет в качестве операции взятие по модулю и логическое условие для проверки значения:

!4d10c[%2=0]

Подсчитывает, сколько выпало чётных чисел.

!4d10c[%2=1]

Подсчитывает, сколько выпало нечётных чисел.

Остаток от деления

Составное средство проверки

Средство проверки может быть результатом объединения нескольких средств проверки.

!4d10c[>4&%2=0]

Подсчитать все кости, значения которых больше 4 и чётные [6,8,10].

Составное средство проверки поддерживает 3 логические операции:

  • И: &
  • ИЛИ: |
  • Исключающее ИЛИ: ^

Составное средство проверки принимает столько средств проверки, сколько нужно:

!9d100c[=1|=3|=5|=7|=11|=13|=17|=19|=23|=29|=31|=37|=41|=43|=47|=53|=59|=61|=67|=71|=73|=79|=83|=89|=97]

Оператор списка

Текстовые значения

Оператор L (или l), означающий список, предоставляет способ извлечь значение из списка.

!1L[sword,bow,knife,gun,shotgun]

С комментарием

!1L[yes,no] # Am I evil ?

Am I evil ? yes

Получение уникальных значений

Параметр u запрашивает уникальные значения.

!2Lu[yes,no]

Эта команда может вернуть yes,no или no,yes. Параметр u делает невозможным возврат yes,yes или no,no.

Удаление запятой между значениями

По умолчанию результаты выводятся с запятой между значениями. Убрать запятую можно с помощью параметра n.

!2Ln[to,kyo]

Эта команда может вернуть toto, kyokyo, tokyo или kyoto.

Уникальные значения без запятой

!2Lun[to,kyo]

или

!2Lnu[to,kyo]

Эти команды могут вернуть tokyo или kyoto.

Числовые значения

Если значение — число, оно также обрабатывается, и с ним можно выполнять вычисления или применять любой оператор.

!1L[-1,0,1,2,3,4]+7

Одновременное использование текста и числа

Не рекомендуется использовать текст и числа в одном операторе списка. Сейчас поведение зависит от результата. Если выбранное значение — число, можно выполнить другие вычисления, иначе результат выводится напрямую без какой-либо обработки.

В будущих выпусках поведение изменится: решение будет приниматься на основе набора данных. Если набор данных содержит только числа, вычисление возможно. В противном случае результат будет рассматриваться как строка.

Изменение вероятности

Существует два основных способа управления вероятностью выпадения при выборе в списке.

Метод муравья

!1L[2,2,3,3,3,3,4,4,4,5]

или

!1L[arm,arm,leg,leg,chest,chest,chest,head]

Ленивый метод

По диапазону:

!1L[1,2,3,4,5,6[6..10]]

По весу:

!1L[1[2],2[2],3[4]]

Несколько результатов:

1
3
1
2
2
1
2
3
1
2
3
2
2
3

Прочие примеры

!3D100

Бросьте 3 кости со 100 гранями.

!10D10e[=10]s

Бросьте 10 костей с 10 гранями, каждая выпавшая 10 взрывается, и отсортируйте результат.

!100291D66666666s

Бросьте 100291 кость с 66666666666 гранями и отсортируйте результат.

!15D10c[>7]

Бросьте 15 костей с 10 гранями и подсчитайте, у скольких значение больше 7.

!1D8+2D6+7

Бросьте 1 кость с 8 гранями, прибавьте её результат к результату 2 костей с 6 гранями и добавьте 7.

!D25

Бросьте 1 кость с 25 гранями.

!88-1D20

88 минус значение 1 кости с 20 гранями

!8+8+8

Вычислить: 24

!1L[sword,bow,knife,gun,shotgun]

Будет выбрано одно из этих слов.

!8D10c[Validator1]-@c[validator2]

Бросьте 8 костей с 10 гранями, затем подсчитайте, сколько костей удовлетворяют условию первого средства проверки, вычтите количество костей, удовлетворяющих второму, и выведите число (подробнее о синтаксисе см. в разделе «Средство проверки»).

!8D10c[>=6]-@c[=1]

Система Old World in darkness.

!8D10c[>=7]+@c[=10]

Система Exalted 2-го издания.

Добавление макросов и порядок

Допустим, нужно определить 2 макроса: a и aa.

Их нужно добавлять от более сложного названия к самому простому.

Плохо

  1. a => 1d10
  2. aa => 2d10

Запуск aa: система макросов сравнит aa с первым макросом a, и они совпадут. Первое вычисление: aa => 1d10a. Второе вычисление: 1d10a => 1d101d10. Итоговая команда для выполнения: 1d101d10

Хорошо

  1. aa => 2d10
  2. a => 1d10

При выполнении команды aa система макросов сравнит aa с aa: совпадение. Первое вычисление: aa => 2d10. Итоговая команда для выполнения: 2d10

Некоторые правила

  1. Использовать регулярное выражение для ограничения подстановки текста
  2. Использовать совершенно другое имя
  3. Избегать шаблонов макросов, которые содержатся в других шаблонах макросов

Всё должно быть в порядке.

Рекомендации

Поскольку DiceParser предоставляет всё больше возможностей, одну и ту же задачу можно решить несколькими способами. Здесь объясняется разница между этими подходами. После этого можно будет выбрать подходящий.

Бросить несколько видов костей и сложить результаты

Плохо

!2d8;2d10m

Хорошо

!2d8+2d10

Оператор объединения полезен, когда нужно применить оператор ко всем выпавшим костям.

Плохо

!1d20K1+1d10K1

Хорошо

!1d20+1d10

Оператор k, сохраняющий все выпавшие кости, практически бесполезен, поскольку это поведение по умолчанию.

Документирование макросов

Примеры и дополнительная информация

Отчёты об ошибках и новые возможности

Оформите заявку в нашей системе отслеживания ошибок. Или свяжитесь с нами в Discord или воспользуйтесь другими способами