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 @@
+
+
+