ENH: Damage context
							parent
							
								
									1530739e9e
								
							
						
					
					
						commit
						95521aebfe
					
				|  | @ -298,6 +298,19 @@ export class OseActor extends Actor { | |||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   async applyDamage(amount=0, multiplier=1) { | ||||
|     amount = Math.floor(parseInt(amount) * multiplier); | ||||
|     const hp = this.data.data.hp; | ||||
| 
 | ||||
|     // Remaining goes to health
 | ||||
|     const dh = Math.clamped(hp.value - amount, 0, hp.max); | ||||
| 
 | ||||
|     // Update the Actor
 | ||||
|     return this.update({ | ||||
|       "data.hp.value": dh | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   static _valueToMod(val) { | ||||
|     switch (val) { | ||||
|       case 3: | ||||
|  |  | |||
|  | @ -0,0 +1,47 @@ | |||
| /** | ||||
|  * This function is used to hook into the Chat Log context menu to add additional options to each message | ||||
|  * These options make it easy to conveniently apply damage to controlled tokens based on the value of a Roll | ||||
|  * | ||||
|  * @param {HTMLElement} html    The Chat Message being rendered | ||||
|  * @param {Array} options       The Array of Context Menu options | ||||
|  * | ||||
|  * @return {Array}              The extended options Array including new context choices | ||||
|  */ | ||||
| export const addChatMessageContextOptions = function(html, options) { | ||||
|   let canApply = li => canvas.tokens.controlled.length && li.find(".dice-roll").length; | ||||
|   options.push( | ||||
|     { | ||||
|       name: game.i18n.localize("OSE.ChatContextDamage"), | ||||
|       icon: '<i class="fas fa-user-minus"></i>', | ||||
|       condition: canApply, | ||||
|       callback: li => applyChatCardDamage(li, 1) | ||||
|     }, | ||||
|     { | ||||
|       name: game.i18n.localize("OSE.ChatContextHealing"), | ||||
|       icon: '<i class="fas fa-user-plus"></i>', | ||||
|       condition: canApply, | ||||
|       callback: li => applyChatCardDamage(li, -1) | ||||
|     } | ||||
|   ); | ||||
|   return options; | ||||
| }; | ||||
| 
 | ||||
| /* -------------------------------------------- */ | ||||
| 
 | ||||
| /** | ||||
|  * Apply rolled dice damage to the token or tokens which are currently controlled. | ||||
|  * This allows for damage to be scaled by a multiplier to account for healing, critical hits, or resistance | ||||
|  * | ||||
|  * @param {HTMLElement} roll    The chat entry which contains the roll data | ||||
|  * @param {Number} multiplier   A damage multiplier to apply to the rolled damage. | ||||
|  * @return {Promise} | ||||
|  */ | ||||
| function applyChatCardDamage(roll, multiplier) { | ||||
|   const amount = roll.find('.dice-total').last().text(); | ||||
|   return Promise.all(canvas.tokens.controlled.map(t => { | ||||
|     const a = t.actor; | ||||
|     return a.applyDamage(amount, multiplier); | ||||
|   })); | ||||
| } | ||||
| 
 | ||||
| /* -------------------------------------------- */ | ||||
|  | @ -8,6 +8,7 @@ import { OseItem } from "./module/item/entity.js"; | |||
| import { OSE } from "./module/config.js"; | ||||
| import { registerSettings } from './module/settings.js'; | ||||
| import { registerHelpers } from './module/helpers.js'; | ||||
| import * as chat from "./module/chat.js"; | ||||
| 
 | ||||
| /* -------------------------------------------- */ | ||||
| /*  Foundry VTT Initialization                  */ | ||||
|  | @ -64,5 +65,5 @@ Hooks.once("setup", function () { | |||
|   } | ||||
| }); | ||||
| 
 | ||||
| 
 | ||||
| Hooks.on("renderChatLog", (app, html, data) => OseItem.chatListeners(html)); | ||||
| Hooks.on("renderChatLog", (app, html, data) => OseItem.chatListeners(html)); | ||||
| Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); | ||||
		Loading…
	
		Reference in New Issue