83 lines
3.5 KiB
JavaScript
83 lines
3.5 KiB
JavaScript
|
export class Macros {
|
||
|
/**
|
||
|
* Creates a macro based on the type of data dropped onto the hotbar.
|
||
|
*
|
||
|
* @param {Object} dropData The data object representing the item dropped.
|
||
|
* @param {string} dropData.type The type of the dropped item (e.g., "Actor", "JournalEntry", "roll").
|
||
|
* @param {string} dropData.uuid The UUID of the dropped item.
|
||
|
* @param {string} [dropData.actorId] The ID of the actor (required if type is "roll").
|
||
|
* @param {string} [dropData.rollType] The type of roll (required if type is "roll").
|
||
|
* @param {string} [dropData.rollTarget] The target of the roll (required if type is "roll").
|
||
|
* @param {string} [dropData.value] The value of the roll (required if type is "roll").
|
||
|
* @param {number} slot The hotbar slot where the macro will be created.
|
||
|
*
|
||
|
* @returns {Promise<void>} A promise that resolves when the macro is created.
|
||
|
*/
|
||
|
static createCthulhuEternalMacro = async function (dropData, slot) {
|
||
|
switch (dropData.type) {
|
||
|
case "Actor":
|
||
|
const actor = await fromUuid(dropData.uuid)
|
||
|
const actorCommand = `game.actors.get("${actor.id}").sheet.render(true)`
|
||
|
this.createMacro(slot, actor.name, actorCommand, actor.img)
|
||
|
break
|
||
|
|
||
|
case "JournalEntry":
|
||
|
const journal = await fromUuid(dropData.uuid)
|
||
|
const journalCommand = `game.journal.get("${journal.id}").sheet.render(true)`
|
||
|
this.createMacro(slot, journal.name, journalCommand, journal.img ? journal.img : "icons/svg/book.svg")
|
||
|
break
|
||
|
|
||
|
case "roll":
|
||
|
const rollCommand =
|
||
|
dropData.rollType === "save"
|
||
|
? `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}', '=');`
|
||
|
: `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');`
|
||
|
const rollName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${game.i18n.localize(`TENEBRIS.Manager.${dropData.rollTarget}`)}`
|
||
|
this.createMacro(slot, rollName, rollCommand, "icons/svg/d20-grey.svg")
|
||
|
break
|
||
|
|
||
|
case "rollDamage":
|
||
|
const weapon = game.actors.get(dropData.actorId).items.get(dropData.rollTarget)
|
||
|
const rollDamageCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');`
|
||
|
const rollDamageName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${weapon.name}`
|
||
|
this.createMacro(slot, rollDamageName, rollDamageCommand, weapon.img)
|
||
|
break
|
||
|
|
||
|
case "rollAttack":
|
||
|
const rollAttackCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollValue}', '${dropData.rollTarget}');`
|
||
|
const rollAttackName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${dropData.rollTarget}`
|
||
|
this.createMacro(slot, rollAttackName, rollAttackCommand, "icons/svg/d20-grey.svg")
|
||
|
break
|
||
|
|
||
|
default:
|
||
|
// Handle other cases or do nothing
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create a macro
|
||
|
* All macros are flaged with a tenebris.macro flag at true
|
||
|
* @param {*} slot
|
||
|
* @param {*} name
|
||
|
* @param {*} command
|
||
|
* @param {*} img
|
||
|
*/
|
||
|
static createMacro = async function (slot, name, command, img) {
|
||
|
let macro = game.macros.contents.find((m) => m.name === name && m.command === command)
|
||
|
if (!macro) {
|
||
|
macro = await Macro.create(
|
||
|
{
|
||
|
name: name,
|
||
|
type: "script",
|
||
|
img: img,
|
||
|
command: command,
|
||
|
flags: { "tenebris.macro": true },
|
||
|
},
|
||
|
{ displaySheet: false },
|
||
|
)
|
||
|
game.user.assignHotbarMacro(macro, slot)
|
||
|
}
|
||
|
}
|
||
|
}
|