From 487994ff24776a78a872be594ca44d5e286b5528 Mon Sep 17 00:00:00 2001 From: macniel Date: Mon, 26 Jan 2026 17:21:35 +0100 Subject: [PATCH] attack rolls via manager are now chatty as well --- src/module/documents/character.mjs | 40 +++++++++++++++++++--- src/module/globals/displayRoll.js | 31 +++++++++++++++-- src/templates/chat/attack-chat-message.hbs | 14 ++++++++ 3 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 src/templates/chat/attack-chat-message.hbs diff --git a/src/module/documents/character.mjs b/src/module/documents/character.mjs index 58628172..c471a5d6 100644 --- a/src/module/documents/character.mjs +++ b/src/module/documents/character.mjs @@ -1,6 +1,8 @@ import {LiturgyData} from "../data/miracle/liturgyData.mjs"; import {Zonenruestung, Zonenwunde, Wunde} from "../data/trefferzone.mjs"; import {PlayerCharacterDataModel} from "../data/character.mjs"; +import {evaluateRoll} from "../globals/DSARoll.mjs"; +import {displayRoll} from "../globals/displayRoll.js"; export class Character extends Actor { @@ -502,15 +504,43 @@ export class Character extends Actor { const skill = this.itemTypes["Skill"].find(p => p._id === data.skill) const target = game.actors.get(game.scenes.current.tokens.find(p => p._id === data.target).actorId) - // TODO: Migrate to DSARoll - const roll = new Roll("1d20cs<" + data.targetNumber) - const evaluated1 = (await roll.evaluate()) + let evaluated = await evaluateRoll("1d20", { + value: data.targetNumber, + mod: data.mod + data.penalty, + owner: data.actor, + werte: [0] + }) - await evaluated1.toMessage({ + const context = { + weapon: weapon.name, + maneuver, + skill: skill.name, + target: target.name, + attacker: this._id, + mod: data.mod, + penalty: data.penalty, + circumstance: data.circumstance, + die: evaluated.evaluated.terms[0].results[0].result, + value: data.targetNumber, + } + + if (evaluated.tap>0) { + context.remaining = evaluated.tap + context.hit = true + context.critical = evaluated.meisterlich + } else { + context.missing = evaluated.tap + context.miss = true + context.fumble = evaluated.patzer + } + + await displayRoll(evaluated.evaluated, game.user, data.actor, false, false, 'systems/DSA_4-1/templates/chat/attack-chat-message.hbs', context) + + /*await evaluated1.toMessage({ speaker: ChatMessage.getSpeaker({actor: this}), flavor: `Attackiert ${target.name} mit ${weapon.name} (${skill.name})
${data.modDescription}`, rollMode: "publicroll", - }) + })*/ } /** diff --git a/src/module/globals/displayRoll.js b/src/module/globals/displayRoll.js index a1117f0d..3d6f39d6 100644 --- a/src/module/globals/displayRoll.js +++ b/src/module/globals/displayRoll.js @@ -11,7 +11,33 @@ */ const displayRoll = async(roll, user=game.user, actor, blind=true, secret=true, template, templateContext) => { + const rollMode = game.settings.get('core', 'rollMode') + + if (game.dice3d) { + + let blind = false // hidden to user + let secret = false // hidden to others + + switch (rollMode) { + case 'selfroll': // secret to others but not blind + blind = false + secret = true + break; + case 'blindgmroll': // secret to others and to user + blind = true + secret = true + break; + case 'gmroll': // secret to others but not to user + blind = false + secret = true + break; + case 'publicroll': // no secret to anyone + default: + blind = false + secret = false + } + game.dice3d.showForRoll(roll, user, true, null, blind, null, ChatMessage.getSpeaker({actor}), { ghost: false, @@ -23,11 +49,12 @@ const displayRoll = async(roll, user=game.user, actor, blind=true, secret=true, try { await loadTemplates([template]) const htmlContent = await renderTemplate(template, templateContext) - ChatMessage.create({ + const chatData = await (ChatMessage.create({ user: user._id, speaker: {actor}, content: htmlContent, - }) + })) + chatData.applyRollMode("roll") } catch (err) { console.log(err) } diff --git a/src/templates/chat/attack-chat-message.hbs b/src/templates/chat/attack-chat-message.hbs new file mode 100644 index 00000000..d5d878c4 --- /dev/null +++ b/src/templates/chat/attack-chat-message.hbs @@ -0,0 +1,14 @@ + + +
+
{{weapon}} ({{value}})
+
Gewürfelt: {{die}}
+
Erschwernis: {{circumstance}}
+
Modifikation: {{mod}}
+
+ {{#if missing}} +
Gefehlt: {{missing}} {{#if fumble}}Patzer{{/if}}
+ {{else}} +
Übrig: {{remaining}} {{#if critical}}Meisterlich{{/if}}
+ {{/if}} +
\ No newline at end of file