Sync with wfrp 4, v8.4.0
All checks were successful
Release Creation / build (release) Successful in 51s
All checks were successful
Release Creation / build (release) Successful in 51s
This commit is contained in:
@ -1,4 +1,6 @@
|
||||
|
||||
import CthulhuEternalRoll from "./documents/roll.mjs"
|
||||
|
||||
export default class CthulhuEternalUtils {
|
||||
|
||||
static registerSettings() {
|
||||
@ -177,6 +179,73 @@ export default class CthulhuEternalUtils {
|
||||
|
||||
}
|
||||
|
||||
static async nudgeRoll(rollMessage) {
|
||||
|
||||
let dialogContext = rollMessage.rolls[0]?.options
|
||||
let actor = game.actors.get(dialogContext.actorId)
|
||||
dialogContext.wpValue = actor.system.wp.value
|
||||
dialogContext.rollResultIndex = rollMessage.rolls[0].total - 1
|
||||
dialogContext.minValue = Math.max(rollMessage.rolls[0].total - (dialogContext.wpValue * 5), 1)
|
||||
dialogContext.maxValue = Math.min(rollMessage.rolls[0].total + (dialogContext.wpValue * 5), 100)
|
||||
dialogContext.wpCost = 0
|
||||
|
||||
// Build options table for the select operator between minValue and maxValue
|
||||
dialogContext.nudgeOptions = Array.from({ length: dialogContext.maxValue - dialogContext.minValue + 1 }, (_, i) => dialogContext.minValue + i)
|
||||
console.log(dialogContext)
|
||||
|
||||
const content = await renderTemplate("systems/fvtt-cthulhu-eternal/templates/nudge-dialog.hbs", dialogContext)
|
||||
|
||||
const title = game.i18n.localize("CTHULHUETERNAL.Roll.nudgeRoll")
|
||||
const rollContext = await foundry.applications.api.DialogV2.wait({
|
||||
window: { title: title },
|
||||
classes: ["fvtt-cthulhu-eternal"],
|
||||
content,
|
||||
buttons: [
|
||||
{
|
||||
action: "apply",
|
||||
label: game.i18n.localize("CTHULHUETERNAL.Roll.applyNudge"),
|
||||
callback: (event, button, dialog) => {
|
||||
const output = Array.from(button.form.elements).reduce((obj, input) => {
|
||||
if (input.name) obj[input.name] = input.value
|
||||
return obj
|
||||
}, {})
|
||||
return output
|
||||
},
|
||||
},
|
||||
{
|
||||
action: "cancel",
|
||||
label: game.i18n.localize("CTHULHUETERNAL.Roll.cancel"),
|
||||
callback: (event, button, dialog) => { }
|
||||
}
|
||||
],
|
||||
actions: {
|
||||
},
|
||||
rejectClose: false, // Click on Close button will not launch an error
|
||||
render: (event, dialog) => {
|
||||
$(".nudged-score-select").change(event => {
|
||||
dialogContext.nudgedValue = Number(event.target.value)+1
|
||||
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
||||
$("#nudged-wp-cost").val(dialogContext.wpCost)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// If the user cancels the dialog, exit
|
||||
if (rollContext === null || dialogContext.wpCost === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
const roll = new CthulhuEternalRoll(String(dialogContext.nudgedValue))
|
||||
await roll.evaluate()
|
||||
roll.options = dialogContext
|
||||
roll.options.isNudgedRoll = true
|
||||
roll.options.isNudge = false
|
||||
roll.displayRollResult(roll, dialogContext, dialogContext.rollData)
|
||||
roll.toMessage()
|
||||
|
||||
actor.system.modifyWP(-dialogContext.wpCost)
|
||||
}
|
||||
|
||||
static setupCSSRootVariables() {
|
||||
const era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
|
||||
|
||||
|
Reference in New Issue
Block a user