ds4/src/module/rolls/slaying-dice-modifier.ts

32 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-06-26 22:02:00 +02:00
// SPDX-FileCopyrightText: 2021 Johannes Loher
// SPDX-FileCopyrightText: 2021 Oliver Rümpelein
//
// SPDX-License-Identifier: MIT
2021-03-13 22:08:04 +01:00
import { DS4Check } from "./check";
export default function registerSlayingDiceModifier(): void {
2021-06-30 04:32:10 +02:00
PoolTerm.MODIFIERS.x = slay;
2021-06-30 05:00:23 +02:00
// PoolTerm.POOL_REGEX = /^{([^}]+)}([A-z]([A-z0-9<=>]+)?)?$/; // TODO: Maybe we don't need this anymore?
2021-03-13 22:08:04 +01:00
}
2021-06-30 04:32:10 +02:00
function slay(this: PoolTerm, modifier: string): void {
2021-03-13 22:08:04 +01:00
const rgx = /[xX]/;
const match = modifier.match(rgx);
if (!match || !this.rolls) return;
let checked = 0;
while (checked < (this.dice.length ?? 0)) {
const diceTerm = this.dice[checked];
checked++;
if (diceTerm instanceof DS4Check && diceTerm.coup) {
const formula = `dsv${diceTerm.checkTargetNumber}c${diceTerm.maximumCoupResult}:${diceTerm.minimumFumbleResult}n`;
const additionalRoll = Roll.create(formula).evaluate();
this.rolls.push(additionalRoll);
this.results.push({ result: additionalRoll.total ?? 0, active: true });
}
2021-03-13 22:22:28 +01:00
if (checked > 1000) throw new Error(game.i18n.localize("DS4.ErrorSlayingDiceRecursionLimitExceeded"));
2021-03-13 22:08:04 +01:00
}
}