ENH: Weapon damage first draft
parent
c0efa40725
commit
44c33d397e
|
@ -88,6 +88,7 @@
|
||||||
"OSE.InitiativeShort": "INIT",
|
"OSE.InitiativeShort": "INIT",
|
||||||
"OSE.Attacks": "Attacks Usable per Round",
|
"OSE.Attacks": "Attacks Usable per Round",
|
||||||
"OSE.AttacksShort": "ATT",
|
"OSE.AttacksShort": "ATT",
|
||||||
|
"OSE.Damage": "Damage",
|
||||||
"OSE.Spellcaster": "Spellcaster",
|
"OSE.Spellcaster": "Spellcaster",
|
||||||
|
|
||||||
"OSE.SpokenLanguages": "Spoken Languages",
|
"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 = {}) {
|
rollAttack(attData, options = {}) {
|
||||||
const rollParts = ["1d20"];
|
const rollParts = ["1d20"];
|
||||||
const data = this.data.data;
|
const data = this.data.data;
|
||||||
|
@ -133,7 +171,7 @@ export class OseActor extends Actor {
|
||||||
rollData: {
|
rollData: {
|
||||||
type: "Attack",
|
type: "Attack",
|
||||||
stat: attData.type,
|
stat: attData.type,
|
||||||
scores: data.scores,
|
scores: data.scores
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -145,6 +183,8 @@ export class OseActor extends Actor {
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this }),
|
speaker: ChatMessage.getSpeaker({ actor: this }),
|
||||||
flavor: `${attData.label} - ${game.i18n.localize("OSE.Attack")}`,
|
flavor: `${attData.label} - ${game.i18n.localize("OSE.Attack")}`,
|
||||||
title: `${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) {
|
if (thac - roll.total > 9) {
|
||||||
return details;
|
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
|
// ADD DAMAGE ROLL
|
||||||
}
|
}
|
||||||
} else if (data.rollData.type == "Save") {
|
} else if (data.rollData.type == "Save") {
|
||||||
|
@ -60,14 +64,14 @@ export class OseDice {
|
||||||
return details;
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
static async sendRoll(
|
static async sendRoll({
|
||||||
parts = [],
|
parts = [],
|
||||||
data = {},
|
data = {},
|
||||||
title = null,
|
title = null,
|
||||||
flavor = null,
|
flavor = null,
|
||||||
speaker = null,
|
speaker = null,
|
||||||
form = null
|
form = null,
|
||||||
) {
|
} = {}) {
|
||||||
const template = "systems/ose/templates/chat/roll-attack.html";
|
const template = "systems/ose/templates/chat/roll-attack.html";
|
||||||
|
|
||||||
let chatData = {
|
let chatData = {
|
||||||
|
@ -92,36 +96,42 @@ export class OseDice {
|
||||||
rollMode = form ? form.rollMode.value : rollMode;
|
rollMode = form ? form.rollMode.value : rollMode;
|
||||||
|
|
||||||
templateData.details = OseDice.digestResult(data, roll);
|
templateData.details = OseDice.digestResult(data, roll);
|
||||||
roll.render().then((r) => {
|
|
||||||
templateData.rollOSE = r;
|
return new Promise((resolve) => {
|
||||||
renderTemplate(template, templateData).then((content) => {
|
roll.render().then((r) => {
|
||||||
chatData.content = content;
|
templateData.rollOSE = r;
|
||||||
chatData.sound = CONFIG.sounds.dice;
|
renderTemplate(template, templateData).then((content) => {
|
||||||
if (game.dice3d) {
|
chatData.content = content;
|
||||||
game.dice3d
|
// Dice So Nice
|
||||||
.showForRoll(
|
if (game.dice3d) {
|
||||||
roll,
|
game.dice3d
|
||||||
game.user,
|
.showForRoll(
|
||||||
true,
|
roll,
|
||||||
chatData.whisper,
|
game.user,
|
||||||
chatData.blind
|
true,
|
||||||
)
|
chatData.whisper,
|
||||||
.then((displayed) => ChatMessage.create(chatData));
|
chatData.blind
|
||||||
} else {
|
)
|
||||||
ChatMessage.create(chatData);
|
.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({
|
static async Roll({
|
||||||
parts = [],
|
parts = [],
|
||||||
data = {},
|
data = {},
|
||||||
options = {},
|
options = {},
|
||||||
event = null,
|
event = null,
|
||||||
|
skipDialog = false,
|
||||||
speaker = null,
|
speaker = null,
|
||||||
flavor = null,
|
flavor = null,
|
||||||
title = null,
|
title = null,
|
||||||
|
@ -143,14 +153,14 @@ export class OseDice {
|
||||||
label: game.i18n.localize("OSE.Roll"),
|
label: game.i18n.localize("OSE.Roll"),
|
||||||
icon: '<i class="fas fa-dice-d20"></i>',
|
icon: '<i class="fas fa-dice-d20"></i>',
|
||||||
callback: (html) => {
|
callback: (html) => {
|
||||||
roll = OseDice.sendRoll(
|
roll = OseDice.sendRoll({
|
||||||
parts,
|
parts: parts,
|
||||||
data,
|
data: data,
|
||||||
title,
|
title: title,
|
||||||
flavor,
|
flavor: flavor,
|
||||||
speaker,
|
speaker: speaker,
|
||||||
html[0].children[0]
|
form: html[0].children[0],
|
||||||
);
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cancel: {
|
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);
|
const html = await renderTemplate(template, dialogData);
|
||||||
let roll;
|
let roll;
|
||||||
|
|
|
@ -49,9 +49,9 @@ export class OseItem extends Item {
|
||||||
|
|
||||||
rollWeapon() {
|
rollWeapon() {
|
||||||
if (this.data.data.missile) {
|
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) {
|
} 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 {
|
} else {
|
||||||
this.actor.rollAttack({type: 'raw', label: this.name});
|
this.actor.rollAttack({type: 'raw', label: this.name});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue