Indicate fumbles / coups on the dice-total
This commit is contained in:
parent
2ccaa5da10
commit
eb0866cfa7
7 changed files with 80 additions and 3 deletions
|
@ -34,11 +34,9 @@ class CheckFactory {
|
|||
private checkOptions: DS4CheckFactoryOptions;
|
||||
|
||||
async execute(): Promise<ChatMessage | unknown> {
|
||||
const rollCls = CONFIG.Dice.rolls[0];
|
||||
|
||||
const innerFormula = ["ds", this.createTargetValueTerm(), this.createCritTerm()].filterJoin("");
|
||||
const formula = this.checkOptions.useSlayingDice ? `{${innerFormula}}x` : innerFormula;
|
||||
const roll = new rollCls(formula);
|
||||
const roll = Roll.create(formula);
|
||||
|
||||
const rollModeTemplate = this.checkOptions.rollMode;
|
||||
return roll.toMessage({}, { rollMode: rollModeTemplate, create: true });
|
||||
|
|
44
src/module/rolls/roll.ts
Normal file
44
src/module/rolls/roll.ts
Normal file
|
@ -0,0 +1,44 @@
|
|||
import { DS4Check } from "./check";
|
||||
|
||||
export class DS4Roll<D extends Record<string, unknown> = Record<string, unknown>> extends Roll<D> {
|
||||
static CHAT_TEMPLATE = "systems/ds4/templates/roll/roll.hbs";
|
||||
|
||||
/**
|
||||
* This only differs from {@link Roll.render} in that it provides `isCoup` and `isFumble` properties to the roll
|
||||
* template if the first dice term is a ds4 check.
|
||||
* @override
|
||||
*/
|
||||
async render(chatOptions: Roll.ChatOptions = {}): Promise<HTMLElement> {
|
||||
chatOptions = mergeObject(
|
||||
{
|
||||
user: game.user?._id,
|
||||
flavor: null,
|
||||
template: DS4Roll.CHAT_TEMPLATE,
|
||||
blind: false,
|
||||
},
|
||||
chatOptions,
|
||||
);
|
||||
const isPrivate = chatOptions.isPrivate;
|
||||
|
||||
// Execute the roll, if needed
|
||||
if (!this._rolled) this.roll();
|
||||
|
||||
// Define chat data
|
||||
const firstDiceTerm = this.dice[0];
|
||||
const isCoup = firstDiceTerm instanceof DS4Check && firstDiceTerm.coup;
|
||||
const isFumble = firstDiceTerm instanceof DS4Check && firstDiceTerm.fumble;
|
||||
|
||||
const chatData = {
|
||||
formula: isPrivate ? "???" : this._formula,
|
||||
flavor: isPrivate ? null : chatOptions.flavor,
|
||||
user: chatOptions.user,
|
||||
tooltip: isPrivate ? "" : await this.getTooltip(),
|
||||
total: isPrivate ? "?" : Math.round((this.total ?? 0) * 100) / 100,
|
||||
isCoup: isPrivate ? null : isCoup,
|
||||
isFumble: isPrivate ? null : isFumble,
|
||||
};
|
||||
|
||||
// Render the roll display template
|
||||
return (renderTemplate(chatOptions.template ?? "", chatData) as unknown) as HTMLElement; // TODO(types): Make this cast unnecessary by fixing upstream
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue