ENH: Weapon damage first draft
parent
c0efa40725
commit
44c33d397e
|
@ -88,6 +88,7 @@
|
|||
"OSE.InitiativeShort": "INIT",
|
||||
"OSE.Attacks": "Attacks Usable per Round",
|
||||
"OSE.AttacksShort": "ATT",
|
||||
"OSE.Damage": "Damage",
|
||||
"OSE.Spellcaster": "Spellcaster",
|
||||
|
||||
"OSE.SpokenLanguages": "Spoken Languages",
|
||||
|
|
|
@ -104,6 +104,44 @@ export class OseActor extends Actor {
|
|||
});
|
||||
}
|
||||
|
||||
rollDamage(attData, options = {}) {
|
||||
const data = this.data.data;
|
||||
|
||||
const rollData = {
|
||||
...this.data,
|
||||
...{
|
||||
rollData: {
|
||||
type: "Damage",
|
||||
stat: attData.type,
|
||||
scores: data.scores
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
let dmgParts = [];
|
||||
if (!attData.dmg || !game.settings.get('ose', 'variableWeaponDamage')) {
|
||||
dmgParts.push("1d6");
|
||||
} else {
|
||||
dmgParts.push(attData.dmg);
|
||||
}
|
||||
|
||||
// Add Str to damage
|
||||
if (attData.type == 'melee') {
|
||||
dmgParts.push("+", data.scores.str.mod);
|
||||
}
|
||||
|
||||
// Damage roll
|
||||
OseDice.Roll({
|
||||
event: options.event,
|
||||
parts: dmgParts,
|
||||
data: rollData,
|
||||
skipDialog: true,
|
||||
speaker: ChatMessage.getSpeaker({ actor: this }),
|
||||
flavor: `${attData.label} - ${game.i18n.localize("OSE.Damage")}`,
|
||||
title: `${attData.label} - ${game.i18n.localize("OSE.Damage")}`,
|
||||
})
|
||||
}
|
||||
|
||||
rollAttack(attData, options = {}) {
|
||||
const rollParts = ["1d20"];
|
||||
const data = this.data.data;
|
||||
|
@ -133,7 +171,7 @@ export class OseActor extends Actor {
|
|||
rollData: {
|
||||
type: "Attack",
|
||||
stat: attData.type,
|
||||
scores: data.scores,
|
||||
scores: data.scores
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -145,6 +183,8 @@ export class OseActor extends Actor {
|
|||
speaker: ChatMessage.getSpeaker({ actor: this }),
|
||||
flavor: `${attData.label} - ${game.i18n.localize("OSE.Attack")}`,
|
||||
title: `${attData.label} - ${game.i18n.localize("OSE.Attack")}`,
|
||||
}).then(() => {
|
||||
this.rollDamage(attData, {});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,11 @@ export class OseDice {
|
|||
if (thac - roll.total > 9) {
|
||||
return details;
|
||||
}
|
||||
details = `<div class='roll-result'><b>Hits AC ${Math.clamped(thac - roll.total,-3,9)}</b> (${thac})</div>`;
|
||||
details = `<div class='roll-result'><b>Hits AC ${Math.clamped(
|
||||
thac - roll.total,
|
||||
-3,
|
||||
9
|
||||
)}</b> (${thac})</div>`;
|
||||
// ADD DAMAGE ROLL
|
||||
}
|
||||
} else if (data.rollData.type == "Save") {
|
||||
|
@ -60,14 +64,14 @@ export class OseDice {
|
|||
return details;
|
||||
}
|
||||
|
||||
static async sendRoll(
|
||||
static async sendRoll({
|
||||
parts = [],
|
||||
data = {},
|
||||
title = null,
|
||||
flavor = null,
|
||||
speaker = null,
|
||||
form = null
|
||||
) {
|
||||
form = null,
|
||||
} = {}) {
|
||||
const template = "systems/ose/templates/chat/roll-attack.html";
|
||||
|
||||
let chatData = {
|
||||
|
@ -80,7 +84,7 @@ export class OseDice {
|
|||
flavor: flavor,
|
||||
data: data,
|
||||
};
|
||||
|
||||
|
||||
// Optionally include a situational bonus
|
||||
if (form !== null) data["bonus"] = form.bonus.value;
|
||||
if (data["bonus"]) parts.push(data["bonus"]);
|
||||
|
@ -92,36 +96,42 @@ export class OseDice {
|
|||
rollMode = form ? form.rollMode.value : rollMode;
|
||||
|
||||
templateData.details = OseDice.digestResult(data, roll);
|
||||
roll.render().then((r) => {
|
||||
templateData.rollOSE = r;
|
||||
renderTemplate(template, templateData).then((content) => {
|
||||
chatData.content = content;
|
||||
chatData.sound = CONFIG.sounds.dice;
|
||||
if (game.dice3d) {
|
||||
game.dice3d
|
||||
.showForRoll(
|
||||
roll,
|
||||
game.user,
|
||||
true,
|
||||
chatData.whisper,
|
||||
chatData.blind
|
||||
)
|
||||
.then((displayed) => ChatMessage.create(chatData));
|
||||
} else {
|
||||
ChatMessage.create(chatData);
|
||||
}
|
||||
|
||||
return new Promise((resolve) => {
|
||||
roll.render().then((r) => {
|
||||
templateData.rollOSE = r;
|
||||
renderTemplate(template, templateData).then((content) => {
|
||||
chatData.content = content;
|
||||
// Dice So Nice
|
||||
if (game.dice3d) {
|
||||
game.dice3d
|
||||
.showForRoll(
|
||||
roll,
|
||||
game.user,
|
||||
true,
|
||||
chatData.whisper,
|
||||
chatData.blind
|
||||
)
|
||||
.then((displayed) => {
|
||||
ChatMessage.create(chatData);
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
chatData.sound = CONFIG.sounds.dice;
|
||||
ChatMessage.create(chatData);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return roll;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
static async Roll({
|
||||
parts = [],
|
||||
data = {},
|
||||
options = {},
|
||||
event = null,
|
||||
skipDialog = false,
|
||||
speaker = null,
|
||||
flavor = null,
|
||||
title = null,
|
||||
|
@ -143,14 +153,14 @@ export class OseDice {
|
|||
label: game.i18n.localize("OSE.Roll"),
|
||||
icon: '<i class="fas fa-dice-d20"></i>',
|
||||
callback: (html) => {
|
||||
roll = OseDice.sendRoll(
|
||||
parts,
|
||||
data,
|
||||
title,
|
||||
flavor,
|
||||
speaker,
|
||||
html[0].children[0]
|
||||
);
|
||||
roll = OseDice.sendRoll({
|
||||
parts: parts,
|
||||
data: data,
|
||||
title: title,
|
||||
flavor: flavor,
|
||||
speaker: speaker,
|
||||
form: html[0].children[0],
|
||||
});
|
||||
},
|
||||
},
|
||||
cancel: {
|
||||
|
@ -159,7 +169,15 @@ export class OseDice {
|
|||
},
|
||||
};
|
||||
|
||||
if (!item) delete buttons.raise;
|
||||
if (skipDialog) {
|
||||
return OseDice.sendRoll({
|
||||
parts,
|
||||
data,
|
||||
title,
|
||||
flavor,
|
||||
speaker,
|
||||
});
|
||||
}
|
||||
|
||||
const html = await renderTemplate(template, dialogData);
|
||||
let roll;
|
||||
|
|
|
@ -49,9 +49,9 @@ export class OseItem extends Item {
|
|||
|
||||
rollWeapon() {
|
||||
if (this.data.data.missile) {
|
||||
this.actor.rollAttack({type: 'missile', label: this.name});
|
||||
this.actor.rollAttack({type: 'missile', label: this.name, dmg: this.data.data.damage});
|
||||
} else if (this.data.data.melee) {
|
||||
this.actor.rollAttack({type: 'melee', label: this.name});
|
||||
this.actor.rollAttack({type: 'melee', label: this.name, dmg: this.data.data.damage});
|
||||
} else {
|
||||
this.actor.rollAttack({type: 'raw', label: this.name});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue