37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
import { rollInitiativeCheck } from "./rolls.mjs"
|
|
|
|
/**
|
|
* Custom Combat class for Oath Hammer.
|
|
* Initiative = opposed Leadership check (DV=0).
|
|
* The number of successes becomes the combatant's initiative score.
|
|
*/
|
|
export default class OathHammerCombat extends Combat {
|
|
/**
|
|
* Override Foundry's rollInitiative to use Leadership skill checks.
|
|
* For characters: Leadership (Fate) opposed check, successes = score.
|
|
* For NPCs: Fate rank + initiative bonus pool.
|
|
*
|
|
* @param {string|string[]} ids Combatant IDs to roll for
|
|
* @param {object} options
|
|
*/
|
|
async rollInitiative(ids, { formula = null, updateTurn = true, messageOptions = {} } = {}) {
|
|
const combatantIds = typeof ids === "string" ? [ids] : ids
|
|
const updates = []
|
|
|
|
for (const id of combatantIds) {
|
|
const combatant = this.combatants.get(id)
|
|
if (!combatant?.isOwner) continue
|
|
const actor = combatant.actor
|
|
if (!actor) continue
|
|
|
|
const { successes } = await rollInitiativeCheck(actor)
|
|
updates.push({ _id: id, initiative: successes })
|
|
}
|
|
|
|
if (!updates.length) return this
|
|
await this.updateEmbeddedDocuments("Combatant", updates)
|
|
if (updateTurn && this.turn !== null) await this.update({ turn: 0 })
|
|
return this
|
|
}
|
|
}
|