From 2e736ca8ca893589dea325854a68ff451158e04d Mon Sep 17 00:00:00 2001 From: macniel Date: Mon, 26 Jan 2026 20:41:41 +0100 Subject: [PATCH] defense rolls are also chatty now. --- src/module/data/skill.mjs | 10 +++- src/module/documents/character.mjs | 59 +++++++++++++-------- src/templates/chat/defense-chat-message.hbs | 14 +++++ 3 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 src/templates/chat/defense-chat-message.hbs diff --git a/src/module/data/skill.mjs b/src/module/data/skill.mjs index 0e28dbf9..db6eaa55 100644 --- a/src/module/data/skill.mjs +++ b/src/module/data/skill.mjs @@ -93,7 +93,15 @@ export class SkillDataModel extends BaseItem { targetNumber: this.at + owner.system.at.basis }) } else { - //targetNumber = this.pa + owner.system.pa.basis + owner.rollDefense({ + skill: this.parent._id, + target: owner._id, + mod: 0, + penalty: 0, + actor: owner, + circumstance: 0, + targetNumber: this.pa + owner.system.pa.basis + }) } } diff --git a/src/module/documents/character.mjs b/src/module/documents/character.mjs index e20e1506..742d283f 100644 --- a/src/module/documents/character.mjs +++ b/src/module/documents/character.mjs @@ -477,25 +477,48 @@ export class Character extends Actor { const maneuver = data.manuever const weapon = this.itemTypes["Equipment"].find(p => p._id === data.weapon) const skill = data.skill !== "Ausweichen" ? this.itemTypes["Skill"].find(p => p._id === data.skill) : "Ausweichen" - //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 flavor = '' - - if (skill === "Ausweichen") { - flavor = `Versucht auszuweichen
${data.modDescription}` - } else { - flavor = `Verteidigt sich gegen einen Angriff mit ${weapon.name} (${skill.name})
${data.modDescription}` + let target = 0 + try { + target = game.actors.get(game.scenes.current.tokens.find(p => p._id === data.target).actorId) + } catch (e) { + target = game.actors.get(data.target) } - await evaluated1.toMessage({ - speaker: ChatMessage.getSpeaker({actor: this}), - flavor, - rollMode: "publicroll", + let evaluated = await evaluateRoll("1d20", { + value: data.targetNumber, + mod: data.mod + data.penalty, + owner: this, + werte: [0] }) + + const context = { + weapon: weapon.name, + maneuver, + target: this.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 (skill === "Ausweichen") { + context.weapon = "Ausweichen" + } + + 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) } async rollAttack(data) { @@ -538,12 +561,6 @@ export class Character extends Actor { } 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/templates/chat/defense-chat-message.hbs b/src/templates/chat/defense-chat-message.hbs new file mode 100644 index 00000000..d5d878c4 --- /dev/null +++ b/src/templates/chat/defense-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