forked from GitHub-Mirrors/foundry-sw5e
60 lines
2 KiB
JavaScript
60 lines
2 KiB
JavaScript
/* -------------------------------------------- */
|
|
/* Hotbar Macros */
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* Create a Macro from an Item drop.
|
|
* Get an existing item macro if one exists, otherwise create a new one.
|
|
* @param {Object} data The dropped data
|
|
* @param {number} slot The hotbar slot to use
|
|
* @returns {Promise}
|
|
*/
|
|
export async function create5eMacro(data, slot) {
|
|
if (data.type !== "Item") return;
|
|
if (!("data" in data)) return ui.notifications.warn("You can only create macro buttons for owned Items");
|
|
const item = data.data;
|
|
|
|
// Create the macro command
|
|
const command = `game.sw5e.rollItemMacro("${item.name}");`;
|
|
let macro = game.macros.entities.find((m) => m.name === item.name && m.command === command);
|
|
if (!macro) {
|
|
macro = await Macro.create({
|
|
name: item.name,
|
|
type: "script",
|
|
img: item.img,
|
|
command: command,
|
|
flags: {"sw5e.itemMacro": true}
|
|
});
|
|
}
|
|
game.user.assignHotbarMacro(macro, slot);
|
|
return false;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* Create a Macro from an Item drop.
|
|
* Get an existing item macro if one exists, otherwise create a new one.
|
|
* @param {string} itemName
|
|
* @return {Promise}
|
|
*/
|
|
export function rollItemMacro(itemName) {
|
|
const speaker = ChatMessage.getSpeaker();
|
|
let actor;
|
|
if (speaker.token) actor = game.actors.tokens[speaker.token];
|
|
if (!actor) actor = game.actors.get(speaker.actor);
|
|
|
|
// Get matching items
|
|
const items = actor ? actor.items.filter((i) => i.name === itemName) : [];
|
|
if (items.length > 1) {
|
|
ui.notifications.warn(
|
|
`Your controlled Actor ${actor.name} has more than one Item with name ${itemName}. The first matched item will be chosen.`
|
|
);
|
|
} else if (items.length === 0) {
|
|
return ui.notifications.warn(`Your controlled Actor does not have an item named ${itemName}`);
|
|
}
|
|
const item = items[0];
|
|
|
|
// Trigger the item roll
|
|
return item.roll();
|
|
}
|