forked from GitHub-Mirrors/foundry-sw5e
59 lines
1.9 KiB
JavaScript
59 lines
1.9 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();
|
|
}
|