restores rollability also for combat skills
parent
e031fe712c
commit
2900a45959
|
|
@ -44,13 +44,89 @@ export class SkillDataModel extends BaseItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle clickable rolls.
|
* Determines the values to consult for the given type of roll (normal: talent roll, attack: AT, parry: PA
|
||||||
* @param {RollMode} rollMode
|
* @returns {{NORMAL: string, ATTACK: string, PARRY: string}}
|
||||||
* @private
|
* @constructor
|
||||||
*/
|
*/
|
||||||
async roll(rollMode = null) {
|
get SKILL_MODE() {
|
||||||
|
return {
|
||||||
|
NORMAL: "NORMAL",
|
||||||
|
ATTACK: "ATTACK",
|
||||||
|
PARRY: "PARRY",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param rollMode {["publicroll","gmroll"] }
|
||||||
|
* @param mode
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
async roll(rollMode = null, mode = this.SKILL_MODE.NORMAL) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rollMode = rollMode ?? game.settings.get('core', 'rollMode');
|
rollMode = rollMode ?? game.settings.get('core', 'rollMode');
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case this.SKILL_MODE.NORMAL:
|
||||||
|
return this.#talentRoll(rollMode)
|
||||||
|
case this.SKILL_MODE.ATTACK:
|
||||||
|
case this.SKILL_MODE.PARRY:
|
||||||
|
return this.#combatRoll(rollMode, mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async #combatRoll(rollMode, mode) {
|
||||||
const owner = this.parent.parent
|
const owner = this.parent.parent
|
||||||
|
const rollData = owner.getRollData()
|
||||||
|
|
||||||
|
let targetNumber = 0
|
||||||
|
|
||||||
|
if (mode === this.SKILL_MODE.ATTACK) {
|
||||||
|
targetNumber = this.at + owner.system.at.basis
|
||||||
|
} else {
|
||||||
|
targetNumber = this.pa + owner.system.pa.basis
|
||||||
|
}
|
||||||
|
|
||||||
|
let roll1 = new Roll(`1d20cs<${targetNumber}`, owner.getRollData());
|
||||||
|
|
||||||
|
let evaluated1 = (await roll1.evaluate())
|
||||||
|
|
||||||
|
const rolledValue = evaluated1.terms[0].results[0].result
|
||||||
|
|
||||||
|
if (rolledValue === 1 || rolledValue === 20) { // TODO: Modify this target
|
||||||
|
// fill with actual evaluation (targetNumber should be reduced by X and roll against that again)
|
||||||
|
}
|
||||||
|
|
||||||
|
let message = ""
|
||||||
|
if (mode === this.SKILL_MODE.ATTACK) {
|
||||||
|
if (rolledValue <= targetNumber) {
|
||||||
|
message = `Würde treffen [${rolledValue}]`
|
||||||
|
} else {
|
||||||
|
message = `Verfehlt [${rolledValue}]`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (rolledValue <= targetNumber) {
|
||||||
|
message = `Würde parrieren [${rolledValue}]`
|
||||||
|
} else {
|
||||||
|
message = `Verfehlt die parade [${rolledValue}]`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
evaluated1.toMessage({
|
||||||
|
speaker: ChatMessage.getSpeaker({actor: owner}),
|
||||||
|
flavor: message,
|
||||||
|
rollMode,
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async #talentRoll(rollMode) {
|
||||||
|
const owner = this.parent.parent
|
||||||
|
|
||||||
let roll1 = new Roll("3d20", owner.getRollData());
|
let roll1 = new Roll("3d20", owner.getRollData());
|
||||||
|
|
||||||
let evaluated1 = (await roll1.evaluate())
|
let evaluated1 = (await roll1.evaluate())
|
||||||
|
|
|
||||||
|
|
@ -223,14 +223,10 @@ export class Character extends Actor {
|
||||||
|
|
||||||
getRollData() {
|
getRollData() {
|
||||||
const data = super.getRollData();
|
const data = super.getRollData();
|
||||||
|
this.prepareDerivedData()
|
||||||
|
|
||||||
if (this.type !== 'character' && this.type !== 'creature') return;
|
if (this.type !== 'character' && this.type !== 'creature') return;
|
||||||
|
|
||||||
if (data.attribute) {
|
|
||||||
for (let [k, v] of Object.entries(data.attribute)) {
|
|
||||||
data[k] = foundry.utils.deepClone(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// move sonderfertigkeiten into data, if it isn't in data the actor doesn't have that sonderfertigkeit
|
// move sonderfertigkeiten into data, if it isn't in data the actor doesn't have that sonderfertigkeit
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
|
||||||
resizable: true,
|
resizable: true,
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
rollCombatSkill: CharacterSheet.#rollCombatSkill,
|
||||||
rollSkill: CharacterSheet.#rollSkill,
|
rollSkill: CharacterSheet.#rollSkill,
|
||||||
roll: CharacterSheet.#dieRoll,
|
roll: CharacterSheet.#dieRoll,
|
||||||
editImage: ActorSheetV2.DEFAULT_OPTIONS.actions.editImage,
|
editImage: ActorSheetV2.DEFAULT_OPTIONS.actions.editImage,
|
||||||
|
|
@ -77,14 +78,31 @@ class CharacterSheet extends HandlebarsApplicationMixin(ActorSheetV2) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {PointerEvent} event
|
||||||
|
*/
|
||||||
static #rollSkill(event) {
|
static #rollSkill(event) {
|
||||||
const {id} = event.srcElement.dataset
|
const {id} = event.target.dataset
|
||||||
const skill = this.document.items.get(id)
|
const skill = this.document.items.get(id)
|
||||||
if (skill?.system?.roll) {
|
if (skill?.system?.roll) {
|
||||||
skill.system.roll("publicroll")
|
skill.system.roll("publicroll")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {PointerEvent} event
|
||||||
|
*/
|
||||||
|
static #rollCombatSkill(event) {
|
||||||
|
const {id} = event.target.dataset
|
||||||
|
const skill = this.document.items.get(id)
|
||||||
|
if (skill?.system?.roll) {
|
||||||
|
skill.system.roll("publicroll", event.shiftKey ? "PARRY" : "ATTACK")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static #dieRoll(event) {
|
static #dieRoll(event) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
const dataset = event.currentTarget.dataset
|
const dataset = event.currentTarget.dataset
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@
|
||||||
|
|
||||||
<div class="die">
|
<div class="die">
|
||||||
{{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }}
|
{{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }}
|
||||||
<span class="value">{{#if this.taw}}
|
<span class="value" data-action="rollCombatSkill" title="Click: Attacke; Shift+Click: Parrieren"
|
||||||
|
data-id="{{this.id}}">{{#if this.taw}}
|
||||||
{{this.taw}}
|
{{this.taw}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if this.liturgiekenntnis}}
|
{{#if this.liturgiekenntnis}}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue