diff --git a/src/lang/en.json b/src/lang/en.json index 11aeeb3..c36e7d6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -42,6 +42,7 @@ "ACKS.roll.reaction": "Reaction roll", "ACKS.roll.initiative": "Group {group} rolls for Initiative!", "ACKS.roll.individualInit": "{name} rolls for Initiative!", + "ACKS.roll.bhr": "Healing roll", "ACKS.table.treasure.roll": "Roll Treasure", @@ -136,6 +137,8 @@ "ACKS.AttacksShort": "ATT", "ACKS.Damage": "Damage", "ACKS.Spellcaster": "Spellcaster", + "ACKS.BHR": "Base Healing Rate", + "ACKS.BHRShort": "BHR", "ACKS.Language": "Language", "ACKS.SpokenLanguages": "Spoken Languages", diff --git a/src/module/actor/actor-sheet.js b/src/module/actor/actor-sheet.js index 1a03b79..113d095 100644 --- a/src/module/actor/actor-sheet.js +++ b/src/module/actor/actor-sheet.js @@ -185,6 +185,11 @@ export class AcksActorSheet extends ActorSheet { actorObject.rollHitDice({ event: event }); }); + html.find(".bhr .attribute-name a").click((ev) => { + let actorObject = this.actor; + actorObject.rollBHR({ event: event }); + }); + // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; diff --git a/src/module/actor/entity.js b/src/module/actor/entity.js index f21c702..d817cbd 100644 --- a/src/module/actor/entity.js +++ b/src/module/actor/entity.js @@ -15,6 +15,7 @@ export class AcksActor extends Actor { this.computeAC(); this.computeEncumbrance(); this.computeTreasure(); + this.computeBHR(); // Determine Initiative if (game.settings.get("acks", "initiative") != "group") { @@ -291,7 +292,33 @@ export class AcksActor extends Actor { }, }; - // Roll and return +// Roll and return + return AcksDice.Roll({ + event: options.event, + parts: rollParts, + data: data, + skipDialog: true, + speaker: ChatMessage.getSpeaker({ actor: this }), + flavor: label, + title: label, + }); + } + + rollBHR(options = {}) { + const label = game.i18n.localize(`ACKS.roll.bhr`); + const rollParts = [this.data.data.hp.bhr]; + if (this.data.type == "character") { + rollParts.push(); + } + + const data = { + actor: this.data, + roll: { + type: "Healing", + }, + }; + +// Roll and return return AcksDice.Roll({ event: options.event, parts: rollParts, @@ -759,5 +786,35 @@ export class AcksActor extends Actor { spoken, data.scores.int.value ); + + } + computeBHR() { + if (this.data.type != "character") { + return; + } + const data = this.data.data; + + const bhrcalc = { + 0: "1d2", + 4: "1d3", + 10: "1d4", + 17: "1d6", + 24: "1d8", + 30: "1d10", + 37: "2d6", + 50: "2d8", + 64: "2d10", + 77: "2d12", + 90: "3d10", + 111: "4d10", + 141: "5d10", + 171: "6d10", + 200: "7d10", + }; + data.hp.bhr = AcksActor._valueFromTable( + bhrcalc, + data.hp.max + ); + }; } diff --git a/src/templates/actors/partials/character-attributes-tab.html b/src/templates/actors/partials/character-attributes-tab.html index 497e078..3dd8cb6 100644 --- a/src/templates/actors/partials/character-attributes-tab.html +++ b/src/templates/actors/partials/character-attributes-tab.html @@ -108,6 +108,15 @@ data-dtype="String" /> +