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 createLethalFantasyMacro = 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)
 | |
|     }
 | |
|   }
 | |
| }
 |