forked from GitHub-Mirrors/foundry-sw5e
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
|
|
/**
|
|
* Override the default Initiative formula to customize special behaviors of the SW5e system.
|
|
* Apply advantage, proficiency, or bonuses where appropriate
|
|
* Apply the dexterity score as a decimal tiebreaker if requested
|
|
* See Combat._getInitiativeFormula for more detail.
|
|
*/
|
|
export const _getInitiativeFormula = function(combatant) {
|
|
const actor = combatant.actor;
|
|
if ( !actor ) return "1d20";
|
|
const init = actor.data.data.attributes.init;
|
|
|
|
let nd = 1;
|
|
let mods = "";
|
|
|
|
if (actor.getFlag("sw5e", "halflingLucky")) mods += "r1=1";
|
|
if (actor.getFlag("sw5e", "initiativeAdv")) {
|
|
nd = 2;
|
|
mods += "kh";
|
|
}
|
|
|
|
const parts = [`${nd}d20${mods}`, init.mod, (init.prof !== 0) ? init.prof : null, (init.bonus !== 0) ? init.bonus : null];
|
|
|
|
// Optionally apply Dexterity tiebreaker
|
|
const tiebreaker = game.settings.get("sw5e", "initiativeDexTiebreaker");
|
|
if ( tiebreaker ) parts.push(actor.data.data.abilities.dex.value / 100);
|
|
return parts.filter(p => p !== null).join(" + ");
|
|
};
|
|
|
|
/**
|
|
* When the Combat encounter updates - re-render open Actor sheets for combatants in the encounter.
|
|
*/
|
|
Hooks.on("updateCombat", (combat, data, options, userId) => {
|
|
const updateTurn = ("turn" in data) || ("round" in data);
|
|
if ( !updateTurn ) return;
|
|
for ( let t of combat.turns ) {
|
|
const a = t.actor;
|
|
if ( t.actor ) t.actor.sheet.render(false);
|
|
}
|
|
});
|