This commit is contained in:
WBHarry 2025-07-27 21:07:10 +02:00
parent f5a4d8cf94
commit 5d6fac39fe
2 changed files with 16 additions and 4 deletions

View file

@ -471,6 +471,12 @@ export default class DhCharacter extends BaseDataActor {
}; };
} }
get basicAttackDamageDice() {
const diceTypes = Object.keys(CONFIG.DH.GENERAL.diceTypes);
const attackDiceIndex = Math.max(Math.min(this.rules.attack.damage.diceIndex, 5), 0);
return diceTypes[attackDiceIndex];
}
static async unequipBeforeEquip(itemToEquip) { static async unequipBeforeEquip(itemToEquip) {
const primary = this.primaryWeapon, const primary = this.primaryWeapon,
secondary = this.secondaryWeapon; secondary = this.secondaryWeapon;
@ -557,15 +563,15 @@ export default class DhCharacter extends BaseDataActor {
this.resources.hope.value = Math.min(baseHope, this.resources.hope.max); this.resources.hope.value = Math.min(baseHope, this.resources.hope.max);
this.attack.roll.trait = this.rules.attack.roll.trait ?? this.attack.roll.trait; this.attack.roll.trait = this.rules.attack.roll.trait ?? this.attack.roll.trait;
const diceTypes = Object.keys(CONFIG.DH.GENERAL.diceTypes); this.attack.damage.parts[0].value.custom.formula = `@prof${this.basicAttackDamageDice}${this.rules.attack.damage.bonus ? ` + ${this.rules.attack.damage.bonus}` : ''}`;
const attackDiceIndex = Math.max(Math.min(this.rules.attack.damage.diceIndex, 5), 0);
this.attack.damage.parts[0].value.custom.formula = `@prof${diceTypes[attackDiceIndex]}${this.rules.attack.damage.bonus ? ` + ${this.rules.attack.damage.bonus}` : ''}`;
} }
getRollData() { getRollData() {
const data = super.getRollData(); const data = super.getRollData();
return { return {
...data, ...data,
basicAttackDamageDice: this.basicAttackDamageDice,
tier: this.tier, tier: this.tier,
level: this.levelData.level.current level: this.levelData.level.current
}; };

View file

@ -35,7 +35,13 @@ export default class FormulaField extends foundry.data.fields.StringField {
/** @inheritDoc */ /** @inheritDoc */
_validateType(value) { _validateType(value) {
const roll = new Roll(value.replace(/@([a-z.0-9_-]+)/gi, '1')); /* A bit suss, but seems to work */
let roll = null;
try {
roll = new Roll(value.replace(/@([a-z.0-9_-]+)/gi, '1'));
} catch (_) {
roll = new Roll(value.replace(/@([a-z.0-9_-]+)/gi, 'd6'));
}
roll.evaluateSync({ strict: false }); roll.evaluateSync({ strict: false });
if (this.options.deterministic && !roll.isDeterministic) if (this.options.deterministic && !roll.isDeterministic)
throw new Error(`must not contain dice terms: ${value}`); throw new Error(`must not contain dice terms: ${value}`);