Add Number Variables flag

This commit is contained in:
Ean Milligan 2025-06-26 04:32:39 -04:00
parent 41fbb1bd50
commit 7116851139
8 changed files with 34 additions and 6 deletions

View File

@ -5,7 +5,7 @@ meta {
} }
get { get {
url: http://localhost:8166/api/roll?user=[discord-user-id]&channel=[discord-channel-id]&rollstr=[artificer-roll-cmd]&documentation=All items below are optional. Flags do not need values.&nd=[no-details-flag]&snd=[super-no-details-flag]&hr=[hide-raw-roll-details-flag]&s=[spoiler-results-flag]&m-or-max=[max-roll-flag, cannot be used with n flag]&min=[min-roll-flag, cannot be used with n, sn, or max]&n=[nominal-roll-flag, cannot be used with sn, max or min flag]&sn=[simulated-nominal-flag, cannot be used with max, min, n. or cc]&gms=[csv-of-discord-user-ids-to-be-dmed-results]&o=[order-rolls, must be a or d]&c=[count-flag]&cc=[confirm-crit-flag, cannot be used with sn]&rd=[roll-dist-flag] url: http://localhost:8166/api/roll?user=[discord-user-id]&channel=[discord-channel-id]&rollstr=[artificer-roll-cmd]&documentation=All items below are optional. Flags do not need values.&nd=[no-details-flag]&snd=[super-no-details-flag]&hr=[hide-raw-roll-details-flag]&s=[spoiler-results-flag]&m-or-max=[max-roll-flag, cannot be used with n flag]&min=[min-roll-flag, cannot be used with n, sn, or max]&n=[nominal-roll-flag, cannot be used with sn, max or min flag]&sn=[simulated-nominal-flag, can pass number with it, cannot be used with max, min, n. or cc]&gms=[csv-of-discord-user-ids-to-be-dmed-results]&o=[order-rolls, must be a or d]&c=[count-flag]&cc=[confirm-crit-flag, cannot be used with sn]&rd=[roll-dist-flag]&nv-or-vn=[number-variables-flag]
body: none body: none
auth: inherit auth: inherit
} }
@ -28,4 +28,5 @@ params:query {
c: [count-flag] c: [count-flag]
cc: [confirm-crit-flag, cannot be used with sn] cc: [confirm-crit-flag, cannot be used with sn]
rd: [roll-dist-flag] rd: [roll-dist-flag]
nv-or-vn: [number-variables-flag]
} }

View File

@ -136,6 +136,7 @@ The Artificer comes with a few supplemental commands to the main rolling command
* `-cc` - Confirm Critical Hits - Automatically rerolls whenever a crit hits, cannot be used with `-sn` * `-cc` - Confirm Critical Hits - Automatically rerolls whenever a crit hits, cannot be used with `-sn`
* `-rd` - Roll Distribution - Shows a raw roll distribution of all dice in roll * `-rd` - Roll Distribution - Shows a raw roll distribution of all dice in roll
* `-hr` - Hide Raw - Hide the raw input, showing only the results/details of the roll * `-hr` - Hide Raw - Hide the raw input, showing only the results/details of the roll
* `-nv` or `-vn` - Number Variables - Adds `xN` before each roll command in the details section for debug reasons
* The results have some formatting applied on them to provide details on what happened during this roll. * The results have some formatting applied on them to provide details on what happened during this roll.
* Critical successes will be **bolded** * Critical successes will be **bolded**
* Critical fails will be <ins>underlined</ins> * Critical fails will be <ins>underlined</ins>

View File

@ -96,7 +96,7 @@ export const runCmd = (rollRequest: QueuedRoll): SolvedRoll => {
} }
// Fill out all of the details and results now // Fill out all of the details and results now
tempReturnData.forEach((e) => { tempReturnData.forEach((e, i) => {
loopCountCheck(); loopCountCheck();
loggingEnabled && log(LT.LOG, `Parsing roll ${rollRequest.rollCmd} | Making return text ${JSON.stringify(e)}`); loggingEnabled && log(LT.LOG, `Parsing roll ${rollRequest.rollCmd} | Making return text ${JSON.stringify(e)}`);
@ -125,8 +125,14 @@ export const runCmd = (rollRequest: QueuedRoll): SolvedRoll => {
line2 += `${preFormat}${rollRequest.modifiers.commaTotals ? e.rollTotal.toLocaleString() : e.rollTotal}${postFormat}, `; line2 += `${preFormat}${rollRequest.modifiers.commaTotals ? e.rollTotal.toLocaleString() : e.rollTotal}${postFormat}, `;
} }
const varNum = `\`x${i}\`: `;
const rollDetails = rollRequest.modifiers.noDetails || rollRequest.modifiers.simulatedNominal > 0 ? ' = ' : ` = ${e.rollDetails} = `; const rollDetails = rollRequest.modifiers.noDetails || rollRequest.modifiers.simulatedNominal > 0 ? ' = ' : ` = ${e.rollDetails} = `;
line3 += `\`${e.initConfig.replaceAll(' ', '')}\`${rollDetails}${preFormat}${rollRequest.modifiers.commaTotals ? e.rollTotal.toLocaleString() : e.rollTotal}${postFormat}\n`; line3 += `${rollRequest.modifiers.numberVariables && i + 1 !== tempReturnData.length ? varNum : ''}\`${
e.initConfig.replaceAll(
' ',
'',
)
}\`${rollDetails}${preFormat}${rollRequest.modifiers.commaTotals ? e.rollTotal.toLocaleString() : e.rollTotal}${postFormat}\n`;
}); });
// If order is on, remove trailing ", " // If order is on, remove trailing ", "

View File

@ -55,6 +55,7 @@ export interface RollModifiers {
commaTotals: boolean; commaTotals: boolean;
confirmCrit: boolean; confirmCrit: boolean;
rollDist: boolean; rollDist: boolean;
numberVariables: boolean;
apiWarn: string; apiWarn: string;
valid: boolean; valid: boolean;
error: Error; error: Error;

View File

@ -19,6 +19,8 @@ export const Modifiers = Object.freeze({
CommaTotals: '-ct', CommaTotals: '-ct',
ConfirmCrit: '-cc', ConfirmCrit: '-cc',
RollDistribution: '-rd', RollDistribution: '-rd',
NumberVariables: '-nv',
VariablesNumber: '-vn',
}); });
export const getModifiers = (args: string[]): [RollModifiers, string[]] => { export const getModifiers = (args: string[]): [RollModifiers, string[]] => {
@ -38,6 +40,7 @@ export const getModifiers = (args: string[]): [RollModifiers, string[]] => {
commaTotals: false, commaTotals: false,
confirmCrit: false, confirmCrit: false,
rollDist: false, rollDist: false,
numberVariables: false,
apiWarn: '', apiWarn: '',
valid: true, valid: true,
error: new Error(), error: new Error(),
@ -122,6 +125,10 @@ export const getModifiers = (args: string[]): [RollModifiers, string[]] => {
case Modifiers.RollDistribution: case Modifiers.RollDistribution:
modifiers.rollDist = true; modifiers.rollDist = true;
break; break;
case Modifiers.NumberVariables:
case Modifiers.VariablesNumber:
modifiers.numberVariables = true;
break;
default: default:
// Default case should not mess with the array // Default case should not mess with the array
defaultCase = true; defaultCase = true;

View File

@ -162,6 +162,16 @@ Shows a raw roll distribution of all dice in roll.`,
example: ['`[[1000d20]] -rd`'], example: ['`[[1000d20]] -rd`'],
}, },
], ],
[
'-nv',
{
name: 'Number Variables',
description: `**Usage:** \`-nv\` or \`-vn\`
Mainly a debug decorator, useful when creating complex rolls that will be reused. Will not number the final roll command in the list as it will not be available for use.`,
example: ['`[[d20]] [[d20]] [[d20]] -vn`'],
},
],
]); ]);
export const DecoratorsHelpPages: HelpPage = { export const DecoratorsHelpPages: HelpPage = {

View File

@ -46,19 +46,20 @@ Damage: 14`,
This message must contain multiple roll commands in it (such as \`[[d4]] [[d8]]\`). Nested dice rolls are not able to be used as a variable, but can use variables inside them. This message must contain multiple roll commands in it (such as \`[[d4]] [[d8]]\`). Nested dice rolls are not able to be used as a variable, but can use variables inside them.
Variables are numbered from \`x0\` to \`xN\`, where \`N\` equals two less than the total number of roll commands in the message. Variables are numbered from \`x0\` to \`xN\`, where \`N\` equals two less than the total number of roll commands in the message. You can add the "Number Variables" flag (\`-nv\`) to your command to see what will be assigned to each roll command.
**Notes about this example:** **Notes about this example:**
- The example below starts with \`[[0]]\` so that it is a valid roll command. See the \`Miscellaneous Features>User Formatting\` help page for more details. - The example below starts with \`[[0]]\` so that it is a valid roll command. See the \`Miscellaneous Features>User Formatting\` help page for more details.
- It is recommended to use the "Super No Details" flag (\`-snd\`) in combination with the "Hide Raw" flag (\`-hr\`) to only show the formatted results. This example does not use it to show exactly what is happening. - It is recommended to use the "Super No Details" flag (\`-snd\`) in combination with the "Hide Raw" flag (\`-hr\`) to only show the formatted results. This example does not use it to show exactly what is happening.
- The example makes use of Nested Roll Commands to use the "To Hit" as the number of dice to roll for the "Explosion".`, - The example makes use of Nested Roll Commands to use the "To Hit" as the number of dice to roll for the "Explosion".`,
example: [ example: [
`\`\`\`[[0]]<=(this is x0) ${config.name} attacks the dragon with their Magical Sword of Extra Strength and Explosions! `If you send:
\`\`\`[[0]]<=(this is x0) ${config.name} attacks the dragon with their Magical Sword of Extra Strength and Explosions!
Strength Check: [[d20 + 8 + 2 - 1]]<=(this is x1) Strength Check: [[d20 + 8 + 2 - 1]]<=(this is x1)
To Hit: [[d20 + 4 - 1 + 8]]<=(this is x2) To Hit: [[d20 + 4 - 1 + 8]]<=(this is x2)
Damage: [[(d8 + 10) * x1]]<=(this is x3) Damage: [[(d8 + 10) * x1]]<=(this is x3)
Explosion: [[ [[x2]]d10! * x3 ]]\`\`\` Explosion: [[ [[x2]]d10! * x3 ]]\`\`\`
The above results in the following: ${config.name} will respond with:
@$ rolled: @$ rolled:
\`[[0]] ${config.name} attacks the dragon with their Magical Sword of Extra Strength and Explosions! Strength Check: [[d20 + 8 + 2 - 1]] To Hit: [[d20 + 4 - 1 + 8]] Damage: [[(d8 + 10) * x1]] Explosion: [[ [[x2]]d10! * x3 ]]\` \`[[0]] ${config.name} attacks the dragon with their Magical Sword of Extra Strength and Explosions! Strength Check: [[d20 + 8 + 2 - 1]] To Hit: [[d20 + 4 - 1 + 8]] Damage: [[(d8 + 10) * x1]] Explosion: [[ [[x2]]d10! * x3 ]]\`

View File

@ -99,6 +99,7 @@ export const apiRoll = async (query: Map<string, string>, apiUserid: bigint): Pr
commaTotals: query.has('ct'), commaTotals: query.has('ct'),
confirmCrit: query.has('cc'), confirmCrit: query.has('cc'),
rollDist: query.has('rd'), rollDist: query.has('rd'),
numberVariables: query.has('nv') || query.has('vn'),
apiWarn: hideWarn ? '' : apiWarning, apiWarn: hideWarn ? '' : apiWarning,
valid: true, valid: true,
error: new Error(), error: new Error(),