Rework roll window
This commit is contained in:
@ -1,27 +1,17 @@
|
||||
import {
|
||||
roll_one_to_onehundred,
|
||||
roll_low_open_ended,
|
||||
roll_high_open_ended,
|
||||
roll_open_ended
|
||||
} from "./rmss_dice_roller_rolls.js";
|
||||
import {
|
||||
getOpenEndedRollModifier,
|
||||
processOpenEndedSixtySixRoll,
|
||||
processOpenEndedRoll,
|
||||
processHighOpenEndedRoll,
|
||||
processLowOpenEndedRoll
|
||||
} from "./rmss_dice_roller_processing.js";
|
||||
|
||||
export default class RMSSToolsDiceRoller extends FormApplication {
|
||||
constructor(itemName, characterBonus) {
|
||||
constructor(item, actor) {
|
||||
super();
|
||||
this.itemName = itemName;
|
||||
this.characterBonus = characterBonus;
|
||||
this.item = foundry.utils.duplicate(item);
|
||||
this.actor = actor;
|
||||
this.itemName = item.name;
|
||||
this.characterBonus = Number(item.system.total_bonus);
|
||||
this.stunnedModifier = actor.getStunnedModifier()
|
||||
this.rollType = [
|
||||
{value: "one_to_onehundred", text: "1-100", selected: false},
|
||||
{value: "open_ended", text: "Open-Ended", selected: true},
|
||||
{value: "high_open_ended", text: "High Open-Ended", selected: false},
|
||||
{value: "low_open_ended", text: "Low Open-Ended", selected: false}
|
||||
{ value: "one_to_onehundred", text: "1-100", selected: false },
|
||||
{ value: "open_ended", text: "Open-Ended", selected: true },
|
||||
{ value: "high_open_ended", text: "High Open-Ended", selected: false },
|
||||
{ value: "low_open_ended", text: "Low Open-Ended", selected: false }
|
||||
];
|
||||
}
|
||||
|
||||
@ -30,8 +20,8 @@ export default class RMSSToolsDiceRoller extends FormApplication {
|
||||
classes: ["form"],
|
||||
title: "Rolemaster Dice Roller",
|
||||
popOut: true,
|
||||
width: 380,
|
||||
height: 210,
|
||||
width: 480,
|
||||
height: 440,
|
||||
template: "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_dice_roller.html"
|
||||
});
|
||||
}
|
||||
@ -42,6 +32,15 @@ export default class RMSSToolsDiceRoller extends FormApplication {
|
||||
itemName: this.itemName,
|
||||
characterBonus: this.characterBonus,
|
||||
selectOptions: this.rollType,
|
||||
woundsModifier: this.actor.system.modifiers.woundsModifier,
|
||||
config: CONFIG.rmss,
|
||||
difficulty: 0,
|
||||
combatSituation: 0,
|
||||
lightningModifier: 0,
|
||||
darknessModifier: 0,
|
||||
hitsPerRound: 0,
|
||||
isStunned: this.actor.system.state.stunned,
|
||||
stunnedModifier: this.stunnedModifier
|
||||
};
|
||||
}
|
||||
|
||||
@ -53,33 +52,112 @@ export default class RMSSToolsDiceRoller extends FormApplication {
|
||||
console.log("Rolling Dice");
|
||||
console.log(formData);
|
||||
console.log(event);
|
||||
switch (formData.rollType) {
|
||||
case "one_to_onehundred":
|
||||
this.roll_one_to_onehundred();
|
||||
break;
|
||||
case "open_ended":
|
||||
this.roll_open_ended();
|
||||
break;
|
||||
case "high_open_ended":
|
||||
this.roll_high_open_ended();
|
||||
break;
|
||||
case "low_open_ended":
|
||||
this.roll_low_open_ended();
|
||||
break;
|
||||
this.roll(event.submitter?.dataset?.value, formData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async showDiceSoNice(roll, rollMode) {
|
||||
if (game.modules.get("dice-so-nice")?.active) {
|
||||
if (game.dice3d) {
|
||||
let whisper = null;
|
||||
let blind = false;
|
||||
rollMode = rollMode ?? game.settings.get("core", "rollMode");
|
||||
switch (rollMode) {
|
||||
case "blindroll": //GM only
|
||||
blind = true;
|
||||
case "gmroll": //GM + rolling player
|
||||
whisper = this.getUsers(user => user.isGM);
|
||||
break;
|
||||
case "roll": //everybody
|
||||
whisper = this.getUsers(user => user.active);
|
||||
break;
|
||||
case "selfroll":
|
||||
whisper = [game.user.id];
|
||||
break;
|
||||
}
|
||||
await game.dice3d.showForRoll(roll, game.user, true, whisper, blind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async roll(rollKey, formData) {
|
||||
let baseRoll = await new Roll("1d100").roll();
|
||||
await this.showDiceSoNice(baseRoll, game.settings.get("core", "rollMode"))
|
||||
let rollType = this.rollType.find(r => r.value == rollKey)?.text;
|
||||
let rollData = {
|
||||
name: this.itemName,
|
||||
rollKey: rollKey,
|
||||
rollType: rollType,
|
||||
difficulty: Number(formData.difficulty),
|
||||
combatSituation: Number(formData?.combatSituation || 0),
|
||||
lightningModifier: Number(formData?.lightningModifier || 0),
|
||||
darknessModifier: Number(formData?.darknessModifier || 0),
|
||||
characterBonus: Number(this.characterBonus),
|
||||
woundsModifier: Number(this.actor.system.modifiers.woundsModifier),
|
||||
hitsPerRound: Number(formData.hitsPerRound),
|
||||
isStunned: this.actor.system.state.stunned,
|
||||
stunnedModifier: this.stunnedModifier,
|
||||
rolls: [baseRoll],
|
||||
}
|
||||
if (baseRoll.result == 66) {
|
||||
rollData.content = "You rolled a 66!";
|
||||
}
|
||||
// Process the for low open ended rolls
|
||||
if (rollKey === "open_ended" || rollKey === "low_open_ended") {
|
||||
if (baseRoll.result < 6) {
|
||||
rollData.lowopen = true
|
||||
let newRoll = await new Roll("-1d100").roll();
|
||||
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.rolls.push(newRoll);
|
||||
while (newRoll.result > 95) {
|
||||
newRoll = await new Roll("-1d100").roll();
|
||||
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.rolls.push(newRoll);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Process the for high open ended rolls
|
||||
if (rollKey === "open_ended" || rollKey === "high_open_ended") {
|
||||
if (baseRoll.result > 95) {
|
||||
rollData.highopen = true
|
||||
let newRoll = await new Roll("1d100").roll();
|
||||
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.rolls.push(newRoll);
|
||||
while (newRoll.result > 95) {
|
||||
newRoll = await new Roll("1d100").roll();
|
||||
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.rolls.push(newRoll);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Compute total of rolls
|
||||
rollData.totalRolls = rollData.rolls.reduce((acc, roll) => Number(acc) + Number(roll.result), 0);
|
||||
rollData.totalFinal = rollData.totalRolls + Number(rollData.combatSituation) +
|
||||
Number(rollData.lightningModifier) +
|
||||
Number(rollData.darknessModifier) +
|
||||
Number(this.actor.system.modifiers.woundsModifier) +
|
||||
Number(formData.difficulty) +
|
||||
Number(rollData.hitsPerRound) +
|
||||
Number(rollData.stunnedModifier) +
|
||||
Number(this.characterBonus);
|
||||
console.log(">>> Roll Data: ", rollData);
|
||||
|
||||
// Define the Chat Message Template
|
||||
let chatTemplate = "systems/fvtt-rolemaster-frp/templates/chat/chat_dice_roll.html";
|
||||
|
||||
// Pass the Data through to be used in the Chat Message
|
||||
let chatData = rollData
|
||||
// Render the Rolls to the Chat Window
|
||||
renderTemplate(chatTemplate, chatData).then((html) => {
|
||||
let chatOptions = {
|
||||
style: CONST.CHAT_MESSAGE_STYLES.ROLL,
|
||||
flavor: rollType,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
content: html,
|
||||
};
|
||||
ChatMessage.create(chatOptions);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
RMSSToolsDiceRoller.prototype.roll_one_to_onehundred = roll_one_to_onehundred;
|
||||
RMSSToolsDiceRoller.prototype.roll_low_open_ended = roll_low_open_ended;
|
||||
RMSSToolsDiceRoller.prototype.roll_high_open_ended = roll_high_open_ended;
|
||||
RMSSToolsDiceRoller.prototype.roll_open_ended = roll_open_ended;
|
||||
|
||||
RMSSToolsDiceRoller.prototype.getOpenEndedRollModifier =
|
||||
getOpenEndedRollModifier;
|
||||
RMSSToolsDiceRoller.prototype.processOpenEndedSixtySixRoll =
|
||||
processOpenEndedSixtySixRoll;
|
||||
RMSSToolsDiceRoller.prototype.processOpenEndedRoll = processOpenEndedRoll;
|
||||
RMSSToolsDiceRoller.prototype.processHighOpenEndedRoll =
|
||||
processHighOpenEndedRoll;
|
||||
RMSSToolsDiceRoller.prototype.processLowOpenEndedRoll = processLowOpenEndedRoll;
|
||||
|
Reference in New Issue
Block a user