Warning, /rolisteam/rolisteam-diceparser/HelpMe.md is written in an unsupported language. File is not indexed.
0001 [](http://www.rolisteam.org)
0002
0003 # Table of Contents
0004
0005 * [DiceParser](#diceparser--what-is-it-)
0006 * [Roll a die](#how-to-roll-a-die)
0007 * [List of operator](#list-of-operator)
0008 * [Keep](#keep)
0009 * [Explode and Keep](#explode-and-keep)
0010 * [Keep Lower dice](#keep-lower-dice)
0011 * [Sort](#sort)
0012 * [Count](#count)
0013 * [Reroll](#reroll)
0014 * [Reroll until](#reroll-until)
0015 * [Explode](#explode)
0016 * [Add](#add)
0017 * [Occurence](#occurence)
0018 * [Backward Jump](#backward-jump)
0019 * [Paint](#paint)
0020 * [Merge](#merge)
0021 * [Filter](#filter)
0022 * [if](#if)
0023 * [Group](#group)
0024 * [Spread](#spread)
0025 * [Unique](#unique)
0026 * [All The same](#allsame)
0027 * [Value list](#Value-list)
0028 * [Switch/Case](#Switch-case)
0029 * [Comment (\#)](#comment-)
0030 * [Functions](#Functions)
0031 * [Managing the output](#the-output)
0032 * [Shortcuts](#shortcuts)
0033 * [Final Result](#final-result)
0034 * [Dice Result](#dice-result)
0035 * [Arithmetic](#arithmetic)
0036 * [Arithmetic and Dice](#arithmetic-and-dice)
0037 * [Validator](#validator)
0038 * [Scalar](#scalar)
0039 * [Boolean Condition](#boolean-condition)
0040 * [Operation Condition](#operation-condition)
0041 * [Composite Validator](#composite-validator)
0042 * [List operator](#list-operator)
0043 * [Text](#text-values)
0044 * [Number](#number-values)
0045 * [Change the odd](#change-the-odd)
0046 * [Miscellaneous examples](#examples)
0047 * [Best Practices](#best-practices)
0048 * [Platforms](#roll-dice-on-each-platform)
0049 * [Discord bot](#discord-bot)
0050 * [Bug report](#bug-report-and-new-features)
0051
0052 # Documentation:
0053
0054 ## DiceParser: What is it ?
0055
0056 DiceParser is a software component dedicated to roll dice through simple commands. This software component is available on different platform.
0057 Such as: discord bot, included in Rolisteam, on twitter etc.
0058
0059 ## About examples in this documentation
0060
0061 To make it clear, all examples in this documentation do not show the start up prefix.
0062 Please, remember to add the proper prefix given where you run dice command: Rolisteam, discord, IRC…
0063 If you don't know, try `!`.
0064 The prefix allows the system to identify your command.
0065
0066 ## How to roll a die
0067
0068 It is real simple. you have to call:
0069 ```
0070 1d6
0071 ```
0072
0073 The first number is the count of dice you want to roll. The second number should be die's faces count.
0074
0075 ### Examples
0076
0077 ```
0078 1d6
0079 ```
0080
0081 Roll one six sided die.
0082
0083 ```
0084 1d10
0085 ```
0086
0087 Roll one ten sided die.
0088
0089 ```
0090 5d10
0091 ```
0092
0093 Roll five ten sided die.
0094
0095 ```
0096 777d6
0097 ```
0098
0099 Roll 777 six sided die.
0100
0101 Thanks of several operations and options, you can tune a bit your rolling command: see [List of operator](#list-of-operator).
0102
0103 ### Roll dice in Range
0104
0105 ```
0106 4d[-1..1]
0107 ```
0108
0109 Rolling 4 dice with value between -1 to 1. (Fudge/Fate system)
0110
0111 ```
0112 3d[0..9]
0113 ```
0114 Rolling 3 dice with 10 faces starting at 0.
0115
0116 ```
0117 3d[-20..-9]
0118 ```
0119 Rolling 3 dice, values are between -20 and -9.
0120
0121
0122 ### Instruction: Roll two (or more) kinds of dice at once
0123
0124 Adding (or any arithmetic operations) results from two (or more) kinds of dice is easy:
0125
0126 ```
0127 1d10+1d8
0128 ```
0129
0130 To display all results without making any operations with those results. Use `;` to mark several instructions.
0131
0132 ```
0133 1d10;1d6 # 2 instructions
0134 ```
0135
0136 or
0137
0138 ```
0139 5d6;1d10;4d100;3d20 # 4 instructions
0140 ```
0141
0142
0143 ### Merge
0144
0145 It is possible to merge every instruction inside a huge one.
0146 The operator merge is dedicated to that.
0147 It is useful when you need to manage all diceresult as the same result.
0148
0149 For example, if you need to keep the higher dice between a d6 and d8.
0150
0151 ```
0152 d6;d8mk1
0153 ```
0154
0155 More details about k operator in [List of operator](#list-of-operator) .
0156
0157 ### Computation between instructions
0158
0159 Thanks to variable system, it is possible to reference the result of a specific instruction.
0160 - To reference the first instruction: `$1`
0161 - To reference the second instruction: `$2`
0162 - To reference the third instruction: `$3`
0163 etc…
0164 the number of instruction is not limited.
0165
0166 ```
0167 8d10;$1c[>6];$1c1;$2-$3
0168 ```
0169
0170 * The first instruction rolls 8 (10 sided) dice
0171 * The second instruction counts how many dice are higher than 6.
0172 * The third instruction counts how many dice are equal to 1.
0173 * The fourth instruction subtracts the result of the third instruction from the result of second one.
0174
0175
0176 ## List of operators
0177
0178 * k: Keep
0179 * K: Explode and keep
0180 * kl: Keep lower
0181 * s: Sort
0182 * c: Count
0183 * r: Reroll
0184 * R: Reroll until
0185 * e: Explode
0186 * a: Reroll and add
0187 * @: Backward Jump
0188 * p: Paint dice
0189 * m: Merge
0190 * i: if
0191 * ;: Next instruction
0192 * g: Group
0193 * b: bind
0194 * \#: Comment
0195
0196 ### Keep
0197
0198 ```
0199 kX
0200 ```
0201
0202 The option sorts the resulting die list and selects the X higher dice.
0203
0204 ### Explode and Keep
0205
0206 ```
0207 KX
0208 ```
0209
0210 Dices explode if their value are at the die **maximum**, the option sorts the resulting die list, then it selects the X higher dice.
0211
0212 #### Examples
0213
0214 ```
0215 6d10K4
0216 ```
0217
0218 Roll 6 10-sided dices, each 10 explodes. So the value of exploded dices is greater than 10.
0219 Result: 40 details: 23 [10,10,3],9,5,3,1,1
0220
0221 Another way to write this command is:
0222 ```
0223 6d10e10k4
0224 ```
0225 This way allows you to change the explode threshold.
0226
0227
0228 In order to compute the number you want to keep, the k operator manages variable. You can't directly put the computation behind the k but you can refer to a previous computation.
0229
0230 ```
0231 # Good
0232 5-3;10d10k$1
0233 ```
0234
0235 ```
0236 # BAD
0237 10d10k5-3
0238 ```
0239
0240 ```
0241 # BAD
0242 10d10k(5-3)
0243 ```
0244
0245 ### Keep Lower dice
0246
0247 ```
0248 klX
0249 ```
0250
0251 The option sorts the resulting die list, then it selects the X lowest dice.
0252
0253
0254 ### Sort
0255
0256 ```
0257 3D10s
0258 ```
0259
0260 The dice list is sorted in descending order.
0261
0262 ```
0263 10d6sl
0264 ```
0265
0266 It rolls 6 dice at 6 faces and then they are sorted in ascending order
0267
0268 ### Count
0269
0270 ```
0271 3D10c[Validator]
0272 ```
0273
0274 Count how many dice respect the condition and display the number (See Validator for more details about syntax)
0275
0276 ### Reroll
0277
0278 ```
0279 3D10r[Validator]
0280 ```
0281
0282 Reroll the die if the previous value fits the validator (See Validator for more details about syntax).
0283
0284 ### Reroll until
0285
0286 ```
0287 3D10R[Validator]
0288 ```
0289
0290 Works like "Reroll", but continue to roll the dice until the condition is false.
0291
0292 ### Explode
0293
0294 ```
0295 3D10e[Validator]
0296 ```
0297
0298 Explode while the value fits the Validator (See Validator for more details about syntax).
0299
0300 ```
0301 3D10e(3)[Validator]
0302 ```
0303
0304 Explode node can have a limit of how many times the die will explode.
0305
0306 ```
0307 3D10e(1d10)[Validator]
0308 ```
0309
0310 The limit is a expression.
0311
0312 ### Examples
0313
0314 ```
0315 3D10e10
0316 ```
0317 While dice value is equal to 10, the dice is rolled again and its result is added to the previous dice value.
0318 > Result: **49 details: 8, 12 [10,2], 29 [10,10,9]**
0319
0320 ```
0321 3D10e[>8]
0322 ```
0323 While the dice value is greater than 8, the dice is rolled again and its result is added to the previous dice value.
0324 > Result: **35 details: 3, 27 [9,10,8], 5**
0325
0326 ### Add
0327
0328 ```
0329 3D10a[Validator]
0330 ```
0331
0332 Reroll the die if its value fits the Validator and add the new value to the previous one. It does that only once.
0333
0334 ### Occurrence
0335
0336 ```
0337 10d10o
0338 ```
0339
0340 Count and sort occurrences of each value.
0341 Result: `3x1,1x2,3x4,2x9,1x10 - [1,1,1,2,4,4,4,9,9,10]`
0342
0343 ```
0344 10d10o2,7
0345 ```
0346
0347 Count and sort occurrence when they occur at least 2 times, the value is 7 or more.
0348 Result: `2x8 - [1,2,3,5,6,7,8,8,9,10]`
0349
0350 ```
0351 10d10o2[<6]
0352 ```
0353
0354 Count and sort occurrence when they occur at least 2 times, the value should respect the validator (here less than 6).
0355 Result: `2x3,2x5 - [3,3,5,5,6,6,6,7,7,8]`
0356
0357
0358 #### Errors
0359
0360 ```
0361 10d10o[<6]
0362 ```
0363
0364 This command is triggering a warning. As occurrence operator can have 0 or 2 parameters. But only one validator is unsupported yet.
0365
0366
0367
0368 ### Backward Jump
0369
0370 This operator is dedicated to apply its next operator to the second to last result.
0371 For example:
0372
0373 ```
0374 8D10c[>=7]+@c[=10]
0375 ```
0376
0377 c[=10] in this command is counting the number of 10 in the result of 8D10, if you remove the @, it will try to count the number of 10 in the result of c[>=7]. The result of c[>=7] is a scalar number (1 or 2 ... (max value 8)); it is not dice list.
0378
0379 ### Paint
0380
0381 ```
0382 8D10p[1:blue]
0383 ```
0384
0385 Paint the first die in the list in blue
0386
0387 ```
0388 8d10p[2:blue]
0389 ```
0390
0391 Paint the two first dice in the list in blue.
0392
0393 https://gist.github.com/obiwankennedy/62101383d411e55d205e44df78aa5299
0394
0395
0396 The amount of color is depending on the client application of DiceParser.
0397 - With Rolisteam, you may set any Qt color's name or set the Hexcode of your color: #ff28AC.
0398 - The cli application supports few colors: black, white, blue, red, black, green, yellow.
0399
0400
0401 ### Filter
0402
0403 Filter operator allows you to ignore some dice results given a validator.
0404
0405 ```
0406 4d6f[!=6]
0407 ```
0408
0409 Result:
0410 > total: 11 - details[5 2 6 4]
0411
0412 the 6 is ignored.
0413
0414 ### Merge
0415
0416 Merge operator is used for gathering several dice rolls from different die type into one dice result and then you may apply any kind of operator.
0417
0418 ```
0419 1d6;1d8mk1
0420 ```
0421
0422 This command merges together the result from the d6 and the d8. Then, it applied the k operator on both result to keep the best.
0423 Be careful, this operator merges the instruction list. Instruction reference (such as $1 etc..) won't work after merge operator.
0424
0425 ### Spead
0426
0427 It makes exploded dice as new dice.
0428 The operator is trigged by *y*.
0429
0430 ```
0431 4d6e6y6k3
0432 ```
0433
0434 First Result: `10 [6, 4], 3, 3, 2`
0435 Result after spead: `6, 4, 3, 2`
0436 Final result: `6+4+3 = 13`
0437
0438 ### All the same
0439
0440 This operator is temporary. It is dedicated to answer issue about Tunnels and Trolls system. It is why the marker operator is `t`.
0441 Dice explode when all dice has the same value.
0442
0443 ```
0444 2d6t
0445 ```
0446
0447 > # Explode twice because 2,1
0448 Result: 12 - details:[2d6t (5 [2,1,2] 7 [2,1,4])]
0449
0450 > # Nothing happened
0451 Result: 10 - details:[2d6t (4 6)]
0452
0453
0454 ### Unique
0455
0456 It makes exploded dice as new dice.
0457
0458 ```
0459 4d6e6u
0460 ```
0461 Result: 6 4 3 3 2
0462 Final result: 6+4+3 = 13
0463
0464 ### Value list
0465
0466 Build your own value list and apply any dice operator.
0467
0468 ```
0469 [10,25,43,8]k1
0470 ```
0471
0472 Get a higher score from several instructions:
0473
0474 ```
0475 1d10;2d6+9;1d20;[$1,$2,$3,$4]k1
0476 ```
0477
0478 Each value is transformed into a die.
0479
0480 ### Bind
0481
0482 Bind works exactly as merge but it keeps instruction array untouched.
0483
0484 ```
0485 !2d8;2d12b;$2k2;$2k2kl1;"your total is $3 with lowest: $4"
0486 ```
0487
0488 Roll two 8-sided dice and two 12-sided dice then bind their results. using this final result, we keep the 2 higher dice and then we isolate the lowest of the two highest.
0489 At the end, we display the result inside a sentence.
0490
0491 ### if
0492
0493 If operator means to allow you to do one thing if some conditions are true.
0494 The if operator has 2 mandatory parameters:
0495 * The condition (see validator)
0496 * the instruction to do when it is true.
0497
0498 There are also 2 optional parameters
0499 * the compare method
0500 * the instruction to do when it is false.
0501
0502 > i*[]{}{}
0503
0504 * \*: the compare method
0505 * []: the validator
0506 * {}: the true instruction
0507 * {}: the false instruction
0508
0509 #### Compare method
0510
0511 There are 4 different methods.
0512 * **On Each**: the condition is tested on each die from the previous part of the command. \[Default method\]
0513 * **On Each value** `?`: the condition is tested on each final value of die from the previous part of the command.
0514 * **All Of Them** `*`: All dice must fit the condition to trigger the true instruction. If all dice do not fit the condition the false instruction is run.
0515 * **One Of Them** `.`: at least one die must fit the condition to trigger the true instruction. If no dices fit the condition the false instruction is run.
0516 * **On Scalar** `:`: the condition is evaluated on the scalar result of the dice roll.
0517
0518 #### Examples:
0519
0520 ```
0521 1d6i[<4]{3}
0522 ```
0523
0524 If the value of the die is less than 4, the die value is 3. (So 1, 2 , 3 become 3).
0525
0526 ```
0527 4d6e6i[=4]{-4}
0528 ```
0529
0530 If die has 4 as value, it removes it. \[Kuro System\]
0531
0532 ```
0533 4d6i.[=6]{+1d6}
0534 ```
0535
0536 if at least one die is equal to 6, then roll another d6 and add it to the result.
0537
0538 ```
0539 4d6i*[=6]{+1d6}
0540 ```
0541
0542 if all dice are equal to 6, then roll another d6 and add it to the result.
0543
0544 ```
0545 2d10i:[>15]{"Success"}{"Fail"}
0546 ```
0547
0548 if the sum of two dice is greater than 15, It displays "Success", otherwise it displays "Fail".
0549
0550 ```
0551 2d10i:[>15]{"Success %1 "}{"Fail %1"}
0552 ```
0553
0554 Same as above, but the final result is displayed beside Success or Fail.
0555
0556 ```
0557 2d10i:[>15]{"Success %1 [%2]"}{"Fail %1 [%2]"}
0558 ```
0559
0560 Same as above, but the result of each die is displayed inside square brackets.
0561
0562
0563 ### Group
0564
0565 Group dices, then count the number of group (7th sea system).
0566
0567 #### Complex output
0568
0569 Group operator can take a parameter to active the complex output.
0570 This output will show each group and any left aside values if any.
0571 To active this output, it is required to add a `s` just after the `g`. See the example below:
0572
0573 #### Example
0574
0575 ```
0576 3d20g10
0577 ```
0578
0579 This will roll 3 dices and then try to group them to make groups of 10. If you get `9 9 2`, you can only create one group whose value is more or equal to ten (`{9,2}`, the second `9` being "wasted").
0580
0581 The `g` operator is allowed to re-order dices to create groups. When rolling `4d20g10`, if you get `7 4 3 6`, the result will be `2` (`{7,3}` and `{6,4}`).
0582
0583 ```
0584 5d10gs10
0585 ```
0586
0587 Then, the final output will be:
0588 ```
0589 2 ({7,3}, {6,4} - [2])
0590 ```
0591
0592 `{7,3}` and `{6,4}` are group, and `[2]` is left aside.
0593
0594 ### Switch case (S)
0595
0596 Switch case operator allows you to transform number value into text.
0597 Its goal is to make that easier than using several if. As you may expect, its syntax is close to if.
0598
0599 ```
0600 1d100S[<50]{"Low"}[>=50]{"Low"}
0601 ```
0602
0603 You may also add a default option
0604
0605 ```
0606 1d4S[=1]{"Low"}[=2]{"small"}[=3]{"medium"}{"big"}
0607 ```
0608
0609 Exclusive mode:
0610 This mode is enabled when a `^` is following the `S`.
0611 ```
0612 1d100S^[<25]{"Low"}[<50]{"small"}[<75]{"medium"}[>=75]{"big"}
0613 ```
0614
0615 ### Comment (\#)
0616
0617 ```
0618 2D6 # Sword attack
0619 ```
0620
0621 Display "Sword attack" and the result of the two dice.
0622 DiceParser ignores everything after the \#. The whole part is treated as one comment.
0623 So DiceParser can answer the question:
0624
0625 ```
0626 1L[yes,no] # Am I evil ?
0627 ```
0628
0629 > Am I evil ?
0630 yes
0631
0632
0633 ## Functions
0634
0635 DiceParser provides function to deal with instructions.
0636 Some functions will come soon (e.g: max, min). It will allow to manage several commands at once.
0637
0638 ### Repeat
0639
0640 > repeat(1d10,5)
0641
0642 Output:
0643 ```
0644 2 - Details [2]
0645 8 - Details [8]
0646 3 - Details [3]
0647 1 - Details [1]
0648 10 - Details [10]
0649 ```
0650
0651 Attention! Be careful, `repeat` works badly with multiple instruction commands
0652
0653 ## The output
0654
0655 DiceParser provides features to let you control the command output.
0656 The final instruction must be a string instruction.
0657 String instruction starts with `"` and ends with `"`.
0658
0659 Rolling:
0660 > `"result"`
0661
0662 Output:
0663 `result`
0664
0665 You can set string instruction inside if operator:
0666
0667 > 1d6i:[>3]{"Success"}{"Fail"}
0668
0669 Output:
0670 `Success` or `Fail`
0671
0672
0673 It offers a quick answer but sometimes you need to see the rolled values.
0674 DiceParser can replace some special tags in order to see values, computation result and whatever.
0675
0676 ### Shortcuts
0677
0678 There are 3 shortcut tags.
0679
0680 * `%1`: last scalar result from each instruction.
0681 * `%2`: all dice results.
0682 * `%3`: last scalar result from the last instruction.
0683
0684 The default output is `%1 details[%2]`.
0685 So, it shows the last scalar result of each instruction and dice result.
0686
0687 `%1` and `%3` are equivalent when there is only one instruction (no \;).
0688
0689 They are really useful but if you have many instructions that can become a bit messy.
0690
0691 ### Final result
0692
0693 It is also possible to set reference to the final value of specific instruction (the result should be a number or a string)
0694
0695 - To reference the first instruction: `$1`
0696 - To reference the second instruction: `$2`
0697 - To reference the third instruction: `$3`
0698
0699 There is no limit on instruction number.
0700
0701
0702 #### String as final result
0703
0704 You can reference the sub result of a string result by adding `[x]` after the instruction reference.
0705 Let see an example, it will be easier to understand.
0706
0707 ```
0708 2Lu[cats,dogs,rats,rabbits,bats,squirrels]
0709 ```
0710
0711 The default result looks like this:
0712
0713 > cats,bats
0714
0715 Now we want to make a sentence with this text:
0716
0717 ```
0718 2Lu[cats,dogs,rats,rabbits,bats,squirrels];"You love $1 and you are afraid of $1"
0719 ```
0720
0721 As $1 refers to "**cats,bats**", it will show:
0722
0723 > You love cats,bats and you are afraid of cats,bats
0724
0725
0726 So, it is not really useful. In order to make it a bit better, we must add some sub-indexes.
0727
0728 ```
0729 2Lu[cats,dogs,rats,rabbits,bats,squirrels];"You love $1[0] and you are afraid of $1[1]"
0730 ```
0731
0732 then we have a proper output.
0733
0734 > You love cats and you are afraid of bats
0735
0736
0737 #### Let see some examples:
0738
0739 ```
0740 8d10;$1c[>6];$1c1;$2-$3
0741 ```
0742
0743 The default output displays: `45,4,0,4 details[4,3,10,7,2,2,7,10]`
0744
0745 ```
0746 8d10;$1c[>6];$1c1;$2-$3i:[>0]{"%3 Success[%2]"}{i:[<0]{"Critical fail %3 [%2]"}{"Fail %3 [%2]"}}
0747 ```
0748
0749 Here, some output example:
0750 * `4 Success[4,3,10,7,2,2,7,10]`
0751 * `Fail 0 [10,3,1,1,2,2,7,5]` (2 success - 2 fails = 0)
0752 * `Critical fail -2 [1,3,1,1,2,2,7,5]` (1 success - 3 fails = -2)
0753
0754 In this example, the critical fail happens when there are more fails than success.
0755 In the next example, the critical fail happens when there was no success and a least one fail.
0756
0757 ```
0758 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]"}}}
0759 ```
0760
0761 Another example, to show how to combine string and dice result.
0762
0763 ```
0764 1d6+1;1L[gold coins,spell scrolls,weapons];"You found $1 $2"
0765 ```
0766
0767 > You found 5 gold coins
0768
0769
0770
0771 ### Dice Result
0772
0773 DiceParser provides tags to display dice result (and each rolled values from a specific instruction).
0774
0775 To show dice values from a specific instruction, just add `@` followed by the instruction's number (e.g: `@1`)
0776
0777 ```
0778 2d6;3d8;"Result $2 - d8:[@2] - d6:[@1]"
0779 ```
0780
0781 The output:
0782
0783 > Result 15 - d8:[7,4,4] - d6:[3,6]`
0784
0785
0786 ### New line
0787
0788 You may need to display your result on several lines. It is really easy:
0789
0790 ```
0791 1d100;1d10;"Attack: $1\nDamage: $2"
0792 ```
0793
0794 This command will display:
0795
0796 > Attack: 31
0797 Damage: 7
0798
0799 ## Arithmetic
0800
0801 Rolisteam Dice Parser is able to compute primary arithmetic operation such as: +, -, /, * and it also manages those operator priority and it can also manage parenthesis.
0802
0803 ```
0804 8+8+8
0805 ```
0806
0807 > Result: 24
0808
0809 ```
0810 24-4
0811 ```
0812
0813 > Result: 20
0814
0815 ```
0816 (3+4)*2
0817 ```
0818
0819 > Result: 14
0820
0821 ```
0822 7/2
0823 ```
0824
0825 > Result: 3.5
0826
0827 ```
0828 (3+2D6)D10
0829 ```
0830
0831 > Roll 2 dice and add 3 to the sum of those dice. Then the result is used for rolling dice.
0832
0833 ```
0834 15|6
0835 ```
0836
0837 > Result: 2
0838
0839 ```
0840 15/6
0841 ```
0842
0843 > Result: 2.5
0844
0845 ## Arithmetic and Dice
0846
0847 It is possible to use arithmetic operation on dice. Please pay attention that the default operation to translate a
0848 dice list to scalar is the sum. So if you roll `3d6`, the result will be a list with 3 values {2, 5 ,1}. Now, we
0849 change a bit the command `3d6+4`: It is resolved like this: {2, 5 ,1} = 8; 8+4 = 12. The final result is 12.
0850
0851 ```
0852 3d6+4
0853 ```
0854
0855 > Roll 3 dice; sum the result; and add 4
0856
0857 ```
0858 10D10-2
0859 ```
0860
0861 > Roll 10 dice; sum the result; and then subtract 2
0862
0863 ```
0864 87-1D20
0865 ```
0866
0867 > Subtract the result of 1 die to 87
0868
0869 ```
0870 (6-4)D10
0871 ```
0872
0873 > Subtract 4 to 6 and then roll two dice.
0874
0875 ```
0876 1D10/2
0877 ```
0878
0879 > Divide by 2 the result of 1 die.
0880
0881 ```
0882 (2+2)**2
0883 ```
0884 > Result: 16
0885
0886 ```
0887 1d10**2
0888 ```
0889
0890 > Roll 1d10 then multiply the result by itself.
0891
0892 ```
0893 15|2
0894 ```
0895 > Integer division of 15 by 2. Result: 7
0896
0897 ```
0898 15/2
0899 ```
0900 > Division of 15 by 2. Result: 7.5
0901
0902 ## Validator
0903
0904 There are five kinds of Validator:
0905
0906 * Scalar
0907 * Range
0908 * Boolean expression
0909 * Operation Condition
0910 * Composite
0911
0912 Any operator which requires validator (such as `a,r,e,c`) can use those three kinds.
0913
0914 ### Scalar
0915
0916 The scalar value sets the validator on equality between the dice value and the validator
0917
0918 ```
0919 4d10e10
0920 ```
0921
0922 This command means: roll 4 dice and they explode on 10.
0923
0924 ### Range
0925
0926 The range is defined as two bounds. You have to use square brackets and the two bounds are separated by `..`.
0927
0928 ```
0929 4d10c[8..10]
0930 1d[-1..8]
0931 ```
0932
0933 ### Boolean Condition
0934
0935 The command counts how many dice have values between >=8 and <=10.
0936
0937 ```
0938 4d10c[>7]
0939 ```
0940
0941 The command counts how many dice are aboved 7.
0942
0943 #### Compare Operator
0944
0945 The Rolisteam Dice Parser allows you to use several logic operators:
0946 * Equal: `=`
0947 * Greater or equal: `>=`
0948 * Lesser or equal: `<=`
0949 * Lesser: `<`
0950 * Greater: `>`
0951 * Different: `!=`
0952
0953
0954 #### Compare methods
0955
0956 As the `if` operator, you can specify the compare method.
0957
0958 * **On Each**: the condition is tested on each die from the previous part of the command. \[Default method\]
0959 * **On Each value** `?`: the condition is tested on each final value of die from the previous part of the command.
0960 * **All Of Them** `*`: All dice must fit the condition to trigger the true instruction. If all dice do not fit the condition the false instruction is run.
0961 * **One Of Them** `.`: at least one die must fit the condition to trigger the true instruction. If no dices fit the condition the false instruction is run.
0962 * **On Scalar** `:`: the condition is evaluated on the scalar result of the dice roll.
0963
0964 ##### Examples:
0965
0966 ```
0967 1L[7,8,9]c[>6]
0968 ```
0969
0970 This command will return 0 because, no die has been rolled, so the result of `1L[7,8,9]` is a final value.
0971
0972 ```
0973 1L[7,8,9]c[?>6]
0974 ```
0975
0976 Output: 1
0977
0978 ```
0979 5d6e6sc[>=8]
0980 ```
0981 Output:
0982
0983 > 0
0984 details: [8 [6,2] 2 1 1 1]
0985
0986
0987 ```
0988 5d6e6f[?>=16]
0989 ```
0990
0991 Output:
0992 As the final sum is equal to 11. It's less than 16 so the filter is filtering everything.
0993
0994 > 0
0995 details: [2 4 1 3 1]
0996
0997
0998 The final sum is higher than 16 so the whole result is accepted by the filter operator.
0999
1000 > 23
1001 details: [3 6 3 5 6]
1002
1003
1004 ```
1005 5d6e6sc[:>=8]
1006 ```
1007
1008 Output:
1009 > 1
1010 details: [8 [6,2] 2 1 1 1]
1011
1012 ### Operation Condition
1013
1014 This validator offers modulo as operation and a Boolean Condition to validate the value:
1015
1016 ```
1017 4d10c[%2=0]
1018 ```
1019
1020 Count how many even numbers have been rolled.
1021
1022
1023 ```
1024 4d10c[%2=1]
1025 ```
1026
1027 Count how many odd numbers have been rolled.
1028
1029 [modulo](https://en.wikipedia.org/wiki/Modulo_operation)
1030
1031 ### Composite Validator
1032
1033 Validator can be the result of several validator.
1034
1035 ```
1036 4d10c[>4&%2=0]
1037 ```
1038
1039 Count all dice greater than 4 and even [6,8,10].
1040
1041 Composite Validator supports 3 logical operations:
1042
1043 * AND : `&`
1044 * OR : `|`
1045 * Exclusive OR : `^`
1046
1047 Composite Validator accepts as many validator as you need:
1048
1049 ```
1050 !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]
1051 ```
1052
1053 ## List operator
1054
1055 * [Number](#number-values)
1056 * [Change the odd](#change-the-odd)
1057
1058 ### Text values
1059
1060 The L (or l) operator (meaning list) provides a way to pick up value from list.
1061
1062 ```
1063 1L[sword,bow,knife,gun,shotgun]
1064 ```
1065
1066 With comment
1067
1068 ```
1069 1L[yes,no] # Am I evil ?
1070 ```
1071
1072 > Am I evil ?
1073 yes
1074
1075 ### Getting unique values
1076
1077 The `u` parameter asks for unique values.
1078
1079 ```
1080 2Lu[yes,no]
1081 ```
1082
1083 This command can return `yes,no` or `no,yes`. The u make it impossible to return `yes,yes` or `no,no`
1084
1085 ### Remove comma between values
1086
1087 By default, results are displayed with a comma between each values. You can remove the comma with the parameter `n`
1088
1089 ```
1090 2Ln[to,kyo]
1091 ```
1092
1093 This command can return `toto`, `kyokyo`, `tokyo`, `kyoto`.
1094
1095 ### Unique with no comma
1096
1097 ```
1098 2Lun[to,kyo]
1099 ```
1100
1101 or
1102
1103 ```
1104 2Lnu[to,kyo]
1105 ```
1106
1107 Those commands can return `tokyo` or `kyoto`.
1108
1109 ### Number values
1110
1111 If the value is a number, it is treated as well and you can do computation on it or use any operator.
1112
1113 ```
1114 1L[-1,0,1,2,3,4]+7
1115 ```
1116
1117 ### Text and Number at the same time
1118
1119 It is not recommended to use text and number in the same list operator.
1120 Currently, the behaviour changes given the result. If the chosen value is a number, you can do other computation, but otherwise, the result is displayed directly without any control on it.
1121
1122 The behaviour will change in future release to base the decision on the data set. If the data set only contains numbers, then computation is possible. Otherwise, it will be treated as string result.
1123
1124
1125 ### Change the odd
1126
1127 There are 2 main ways to control the odd on the pickup in the list.
1128
1129 #### The ant method
1130
1131 ```
1132 1L[2,2,3,3,3,3,4,4,4,5]
1133 ```
1134
1135 or
1136
1137 ```
1138 1L[arm,arm,leg,leg,chest,chest,chest,head]
1139 ```
1140
1141 #### The lazy method
1142
1143 By range:
1144
1145 ```
1146 1L[1,2,3,4,5,6[6..10]]
1147 ```
1148
1149
1150 By weight:
1151
1152 ```
1153 1L[1[2],2[2],3[4]]
1154 ```
1155
1156 Several results:
1157
1158 ```
1159 1
1160 3
1161 1
1162 2
1163 2
1164 1
1165 2
1166 3
1167 1
1168 2
1169 3
1170 2
1171 2
1172 3
1173 ```
1174
1175 ## Examples
1176
1177 ```
1178 3D100
1179 ```
1180
1181 Roll 3 dice with 100 faces
1182
1183 ```
1184 10D10e[=10]s
1185 ```
1186
1187 Roll 10 dice with 10 faces, 10 explodes, and sort the result.
1188
1189 ```
1190 100291D66666666s
1191 ```
1192
1193 Roll 100291 dice with 66666666666 faces and sort result
1194
1195 ```
1196 15D10c[>7]
1197 ```
1198
1199 roll 15 dice with 10 faces and it counts number of dice which are above 7
1200
1201 ```
1202 1D8+2D6+7
1203 ```
1204
1205 roll 1 die with 8 faces and add the result to 2 dice with 6 faces and add 7.
1206
1207 ```
1208 D25
1209 ```
1210
1211 roll 1 die with 25 faces
1212
1213 ```
1214 88-1D20
1215 ```
1216
1217 88 minus the value of 1 die of 20 faces
1218
1219 ```
1220 8+8+8
1221 ```
1222
1223 compute: 24
1224
1225 ```
1226 1L[sword,bow,knife,gun,shotgun]
1227 ```
1228
1229 One of this word will be picked.
1230
1231 ```
1232 8D10c[Validator1]-@c[validator2]
1233 ```
1234
1235 Roll 8 dice with 10 faces then it counts how many dice respect the condition Validator1 and substract the number of dice which respect the validator2 and display the number (See Validator for more details about syntax)
1236
1237 ```
1238 8D10c[>=6]-@c[=1]
1239 ```
1240
1241 Old World in darkness system.
1242
1243 ```
1244 8D10c[>=7]+@c[=10]
1245 ```
1246
1247 Exalted 2nd edition system.
1248
1249
1250 ## Best Practices
1251
1252 As DiceParser provides more and more features, you may find several ways to do the same thing. We want here to explain the difference between those several approaches. Then you will be able to use the right one.
1253
1254
1255 ### Roll several kind of dice and sum them
1256
1257 **Bad**
1258 ```
1259 2d8;2d10m
1260 ```
1261
1262 **Good**
1263 ```
1264 2d8+2d10
1265 ```
1266
1267 The merge operator is useful when you want to use dice operator on all rolled dice.
1268
1269 **Bad**
1270 ```
1271 1d20K1+1d10K1
1272 ```
1273
1274 **Good**
1275 ```
1276 1d20+1d10
1277 ```
1278
1279 The k operator to keep as many dice as you roll is pretty useless because it is the default behaviour.
1280
1281 ## Platform specific documentation
1282
1283 ### Roll dice on each platform
1284
1285 | platform | start character(s) | more information |
1286 |---|---|--- |
1287 | Rolisteam |```!```| [Documentation](http://wiki.rolisteam.org/index.php/En:Dice) |
1288 | Discord |```!```| To install DiceParser on your server [http://www.rolisteam.org/discord.html](http://www.rolisteam.org/discord.html) |
1289 | Twitter | ```#roll``` | Twit any message starting with #roll following by dice command (e.g: ```#roll 2d6```) |
1290 | dice | nothing | dice is a command line application to roll dice: ```dice "2d6"``` |
1291
1292
1293 ### Known Limitations
1294
1295 | platform | descriptions |
1296 |---|---|
1297 | Rolisteam | no support for comments yet. Rolisteam is a big software. You may not have all the most recent feature from diceparser. |
1298 | Discord | If the command takes too much time. It is canceled |
1299 | Twitter | Result should be short. No aliases |
1300 | dice | |
1301
1302 # Discord Bot
1303
1304 Documentation of the bot is now inline with the bot.
1305
1306 ## Prefix documentation
1307
1308 > !help prefix
1309
1310 ## Macro documentation
1311
1312 > !help macro
1313
1314 [Examples and More information](https://invent.kde.org/rolisteam/rolisteam-diceparser/-/blob/master/community_macro.md)
1315
1316 ## Alias documentation
1317
1318 > !help alias
1319
1320 ## Conf documentation
1321
1322 > !help conf
1323
1324 ## Difference between Aliases and Macros
1325
1326 Aliases is the feature of the bot, macro is a feature of the dice system behind the bot.
1327 Aliases is a way to run several commands at once.
1328
1329 Macro is a way to run huge command by typing few letters. Macros may have parameters (such as dice number, threshold for success or whatever)
1330
1331 # Bug report and new features
1332
1333 Please fulfill a ticket in our [Bug tracker](https://invent.kde.org/kde/rolisteam-diceparser/issues/new) system.
1334 Or contact us on [discord](https://discordapp.com/invite/MrMrQwX) or any [other ways](http://www.rolisteam.org/contact.html)