mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-06-06 04:44:16 +02:00
Initial
This commit is contained in:
parent
e4a3f105dc
commit
cb2116ffef
4 changed files with 77 additions and 21 deletions
|
|
@ -3097,6 +3097,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ChatLog": {
|
"ChatLog": {
|
||||||
|
"rerollActionRoll": "Reroll Action",
|
||||||
"rerollDamage": "Reroll Damage",
|
"rerollDamage": "Reroll Damage",
|
||||||
"assignTagRoll": "Assign as Tag Roll"
|
"assignTagRoll": "Assign as Tag Roll"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,20 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
_getEntryContextOptions() {
|
_getEntryContextOptions() {
|
||||||
return [
|
return [
|
||||||
...super._getEntryContextOptions(),
|
...super._getEntryContextOptions(),
|
||||||
|
{
|
||||||
|
label: 'DAGGERHEART.UI.ChatLog.rerollActionRoll',
|
||||||
|
icon: '<i class="fa-solid fa-dice"></i>',
|
||||||
|
visible: li => {
|
||||||
|
const message = game.messages.get(li.dataset.messageId);
|
||||||
|
return game.user.isGM || message.isAuthor;
|
||||||
|
},
|
||||||
|
callback: async li => {
|
||||||
|
const message = game.messages.get(li.dataset.messageId);
|
||||||
|
const reroll = await message.rolls[0].reroll({ liveRoll: true });
|
||||||
|
|
||||||
|
message.update({ rolls: [reroll] });
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: 'DAGGERHEART.UI.ChatLog.rerollDamage',
|
label: 'DAGGERHEART.UI.ChatLog.rerollDamage',
|
||||||
icon: '<i class="fa-solid fa-dice"></i>',
|
icon: '<i class="fa-solid fa-dice"></i>',
|
||||||
|
|
@ -113,9 +127,11 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
|
||||||
: false;
|
: false;
|
||||||
return (game.user.isGM || message.isAuthor) && hasRolledDamage;
|
return (game.user.isGM || message.isAuthor) && hasRolledDamage;
|
||||||
},
|
},
|
||||||
callback: li => {
|
callback: async li => {
|
||||||
const message = game.messages.get(li.dataset.messageId);
|
const message = game.messages.get(li.dataset.messageId);
|
||||||
new game.system.api.applications.dialogs.RerollDamageDialog(message).render({ force: true });
|
const reroll = await message.rolls[0].reroll();
|
||||||
|
message.update({ rolls: [reroll] });
|
||||||
|
// new game.system.api.applications.dialogs.RerollDamageDialog(message).render({ force: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
||||||
|
import DualityRoll from '../dualityRoll.mjs';
|
||||||
|
|
||||||
export default class DualityDie extends foundry.dice.terms.Die {
|
export default class DualityDie extends foundry.dice.terms.Die {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
|
|
@ -12,24 +13,6 @@ export default class DualityDie extends foundry.dice.terms.Die {
|
||||||
return roll.withHope ? 1 : roll.withFear ? -1 : 0;
|
return roll.withHope ? 1 : roll.withFear ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#updateResources(oldDuality, newDuality, actor) {
|
|
||||||
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
|
||||||
if (game.user.isGM ? !hopeFear.gm : !hopeFear.players) return;
|
|
||||||
|
|
||||||
const updates = [];
|
|
||||||
const hope = (newDuality >= 0 ? 1 : 0) - (oldDuality >= 0 ? 1 : 0);
|
|
||||||
const stress = (newDuality === 0 ? 1 : 0) - (oldDuality === 0 ? 1 : 0);
|
|
||||||
const fear = (newDuality === -1 ? 1 : 0) - (oldDuality === -1 ? 1 : 0);
|
|
||||||
|
|
||||||
if (hope !== 0) updates.push({ key: 'hope', value: hope, total: -1 * hope, enabled: true });
|
|
||||||
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, total: stress, enabled: true });
|
|
||||||
if (fear !== 0) updates.push({ key: 'fear', value: fear, total: -1 * fear, enabled: true });
|
|
||||||
|
|
||||||
const resourceUpdates = new ResourceUpdateMap(actor);
|
|
||||||
resourceUpdates.addResources(updates);
|
|
||||||
resourceUpdates.updateResources();
|
|
||||||
}
|
|
||||||
|
|
||||||
async reroll(modifier, options) {
|
async reroll(modifier, options) {
|
||||||
const oldDuality = this.#getDualityState(options.liveRoll.roll);
|
const oldDuality = this.#getDualityState(options.liveRoll.roll);
|
||||||
await super.reroll(modifier, options);
|
await super.reroll(modifier, options);
|
||||||
|
|
@ -57,7 +40,7 @@ export default class DualityDie extends foundry.dice.terms.Die {
|
||||||
if (options.liveRoll.isReaction) return;
|
if (options.liveRoll.isReaction) return;
|
||||||
|
|
||||||
const newDuality = this.#getDualityState(options.liveRoll.roll);
|
const newDuality = this.#getDualityState(options.liveRoll.roll);
|
||||||
this.#updateResources(oldDuality, newDuality, options.liveRoll.actor);
|
DualityRoll.updateResources(oldDuality, newDuality, options.liveRoll.actor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import D20RollDialog from '../applications/dialogs/d20RollDialog.mjs';
|
import D20RollDialog from '../applications/dialogs/d20RollDialog.mjs';
|
||||||
import D20Roll from './d20Roll.mjs';
|
import D20Roll from './d20Roll.mjs';
|
||||||
import { parseRallyDice, setDiceSoNiceForDualityRoll } from '../helpers/utils.mjs';
|
import { parseRallyDice, setDiceSoNiceForDualityRoll } from '../helpers/utils.mjs';
|
||||||
|
import { getDiceSoNicePresets } from '../config/generalConfig.mjs';
|
||||||
|
import { ResourceUpdateMap } from '../data/action/baseAction.mjs';
|
||||||
|
|
||||||
export default class DualityRoll extends D20Roll {
|
export default class DualityRoll extends D20Roll {
|
||||||
_advantageNumber = 1;
|
_advantageNumber = 1;
|
||||||
|
|
@ -380,4 +382,58 @@ export default class DualityRoll extends D20Roll {
|
||||||
if (currentCombatant?.actorId == config.data.id) ui.combat.setCombatantSpotlight(currentCombatant.id);
|
if (currentCombatant?.actorId == config.data.id) ui.combat.setCombatantSpotlight(currentCombatant.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static updateResources(oldDuality, newDuality, actor) {
|
||||||
|
const { hopeFear } = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.Automation);
|
||||||
|
if (game.user.isGM ? !hopeFear.gm : !hopeFear.players) return;
|
||||||
|
|
||||||
|
const updates = [];
|
||||||
|
const hope = (newDuality >= 0 ? 1 : 0) - (oldDuality >= 0 ? 1 : 0);
|
||||||
|
const stress = (newDuality === 0 ? 1 : 0) - (oldDuality === 0 ? 1 : 0);
|
||||||
|
const fear = (newDuality === -1 ? 1 : 0) - (oldDuality === -1 ? 1 : 0);
|
||||||
|
|
||||||
|
if (hope !== 0) updates.push({ key: 'hope', value: hope, total: -1 * hope, enabled: true });
|
||||||
|
if (stress !== 0) updates.push({ key: 'stress', value: -1 * stress, total: stress, enabled: true });
|
||||||
|
if (fear !== 0) updates.push({ key: 'fear', value: fear, total: -1 * fear, enabled: true });
|
||||||
|
|
||||||
|
const resourceUpdates = new ResourceUpdateMap(actor);
|
||||||
|
resourceUpdates.addResources(updates);
|
||||||
|
resourceUpdates.updateResources();
|
||||||
|
}
|
||||||
|
|
||||||
|
async reroll(options) {
|
||||||
|
const oldDuality = this.withHope ? 1 : this.withFear ? -1 : 0;
|
||||||
|
const rerolled = DualityRoll.fromData((await super.reroll(options)).toJSON());
|
||||||
|
|
||||||
|
if (options?.liveRoll) {
|
||||||
|
if (game.modules.get('dice-so-nice')?.active) {
|
||||||
|
const diceAppearance = await getDiceSoNicePresets(
|
||||||
|
rerolled,
|
||||||
|
rerolled.dHope.denomination,
|
||||||
|
rerolled.dFear.denomination
|
||||||
|
);
|
||||||
|
rerolled.dHope.options.appearance = diceAppearance.hope.appearance;
|
||||||
|
rerolled.dFear.options.appearance = diceAppearance.fear.appearance;
|
||||||
|
if (rerolled.dAdvantage) rerolled.dAdvantage.options.appearance = diceAppearance.advantage.appearance;
|
||||||
|
if (rerolled.dDisadvantage)
|
||||||
|
rerolled.dDisadvantage.options.appearance = diceAppearance.disadvantage.appearance;
|
||||||
|
|
||||||
|
await game.dice3d.showForRoll(rerolled, game.user, true);
|
||||||
|
} else {
|
||||||
|
foundry.audio.AudioHelper.play({ src: CONFIG.sounds.dice });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.options.actionType === 'reaction') return;
|
||||||
|
|
||||||
|
const newDuality = rerolled.withHope ? 1 : rerolled.withFear ? -1 : 0;
|
||||||
|
const actor = await foundry.utils.fromUuid(this.options.source.actor);
|
||||||
|
DualityRoll.updateResources(oldDuality, newDuality, actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rerolled;
|
||||||
|
}
|
||||||
|
|
||||||
|
fromJSON(json) {
|
||||||
|
return super.fromJSON(json);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue