From 803604c1fee6ea29aacd9411c11802f6fe0f7943 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Fri, 26 Jul 2024 14:15:51 +0200 Subject: [PATCH] Merge dice-roller branch --- assets/fonts/PragRoman.ttf | Bin 0 -> 85484 bytes assets/fonts/PragRoman.woff2 | Bin 0 -> 31704 bytes assets/icons/R.svg | 68 ++++ assets/icons/vec-alldice-jp.svg | 354 ++++++++++++++++++ gulpfile.js | 4 +- less/actor-sheet/actor-sheet-skillcat.less | 4 +- less/actor-sheet/actor-sheet.less | 7 + less/icons/R.svg | 68 ++++ less/icons/vec-alldice-jp.svg | 354 ++++++++++++++++++ less/rmss.less | 4 + less/skillcat-sheet/skillcat-sheet.less | 7 + less/tools/dice-roller.less | 20 + module/controls.js | 26 ++ module/documents/actor.js | 52 +++ module/documents/item.js | 12 +- module/sheets/actors/rmss_player_sheet.js | 12 +- module/sheets/apps/rmss_dice_roller.js | 85 +++++ .../apps/rmss_dice_roller_processing.js | 131 +++++++ module/sheets/apps/rmss_dice_roller_rolls.js | 71 ++++ .../apps/rmss_import_skill_categories.js | 56 +++ .../{000004.log => 000008.log} | 0 packs/skill_categories/CURRENT | 2 +- packs/skill_categories/LOG | 13 +- packs/skill_categories/LOG.old | 5 + packs/skill_categories/MANIFEST-000002 | Bin 135 -> 0 bytes packs/skill_categories/MANIFEST-000006 | Bin 0 -> 135 bytes rmss.css | 24 +- rmss.js | 38 +- templates/chat/chat_dice_roll.html | 28 ++ .../actors/parts/actor-skill-categories.html | 3 +- templates/sheets/apps/app_dice_roller.html | 27 ++ .../apps/app_skill_category_importer.html | 17 + 32 files changed, 1458 insertions(+), 34 deletions(-) create mode 100644 assets/fonts/PragRoman.ttf create mode 100644 assets/fonts/PragRoman.woff2 create mode 100644 assets/icons/R.svg create mode 100644 assets/icons/vec-alldice-jp.svg create mode 100644 less/icons/R.svg create mode 100644 less/icons/vec-alldice-jp.svg create mode 100644 less/tools/dice-roller.less create mode 100644 module/controls.js create mode 100644 module/sheets/apps/rmss_dice_roller.js create mode 100644 module/sheets/apps/rmss_dice_roller_processing.js create mode 100644 module/sheets/apps/rmss_dice_roller_rolls.js create mode 100644 module/sheets/apps/rmss_import_skill_categories.js rename packs/skill_categories/{000004.log => 000008.log} (100%) create mode 100644 packs/skill_categories/LOG.old delete mode 100644 packs/skill_categories/MANIFEST-000002 create mode 100644 packs/skill_categories/MANIFEST-000006 create mode 100644 templates/chat/chat_dice_roll.html create mode 100644 templates/sheets/apps/app_dice_roller.html create mode 100644 templates/sheets/apps/app_skill_category_importer.html diff --git a/assets/fonts/PragRoman.ttf b/assets/fonts/PragRoman.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d2293804d6327cfcaca6dd6a03b74768d3e88875 GIT binary patch literal 85484 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 z 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 E3lHXS9{>OV literal 0 HcmV?d00001 diff --git a/assets/fonts/PragRoman.woff2 b/assets/fonts/PragRoman.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e935647fc95bc89a8748b1239c06b000000f6e7c GIT binary patch literal 31704 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 + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/assets/icons/vec-alldice-jp.svg b/assets/icons/vec-alldice-jp.svg new file mode 100644 index 0000000..0fec769 --- /dev/null +++ b/assets/icons/vec-alldice-jp.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D4 + + + + + + + + + + D8 + + + + + + + D6 + + + + + + + + + + + + D10 + + + + + + + + + + + + + D12 + + + + + + + + + + + + D20 + + + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 14 + + + + + + 15 + + + + + + 16 + + + + + + 17 + + + + + + 18 + + + + + + 19 + + + + + + 20 + + + + + + 4 + + + + + + 5 + + + + + + 6 + + + + + + 7 + + + + + + 8 + + + + + + 9 + + + + + + 10 + + + + + + 11 + + + + + + 12 + + + + + + 13 + + + + + + 40 + + + + + + 50 + + + + + + 60 + + + + + + 70 + + + + + + 80 + + + + + + 90 + + + + + + 0 + + + + + + 00 + + + + + + 30 + + + + + + * + + + + + + X + + + + + + - + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 65e056a..0841fc8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,5 +1,5 @@ var gulp = require('gulp'); -var less = require('gulp.less'); +var less = require('gulp-less'); gulp.task('less', function (cb) { gulp @@ -15,4 +15,4 @@ gulp.task( gulp.watch('less/*.less', gulp.series('less')); cb(); }) -); \ No newline at end of file +); diff --git a/less/actor-sheet/actor-sheet-skillcat.less b/less/actor-sheet/actor-sheet-skillcat.less index c3794e6..da74fd4 100644 --- a/less/actor-sheet/actor-sheet-skillcat.less +++ b/less/actor-sheet/actor-sheet-skillcat.less @@ -12,7 +12,7 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; + //flex-direction: column; justify-content: center; } @@ -37,7 +37,7 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; + //flex-direction: column; justify-content: center; background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0); } diff --git a/less/actor-sheet/actor-sheet.less b/less/actor-sheet/actor-sheet.less index 9d410ba..2bcddf4 100644 --- a/less/actor-sheet/actor-sheet.less +++ b/less/actor-sheet/actor-sheet.less @@ -4,6 +4,13 @@ display: flex; } + +.rm-heading { + font-size: 1.0em; + font-family: PragRoman; + border-bottom: 0px; +} + // Header CSS .actor-icon { diff --git a/less/icons/R.svg b/less/icons/R.svg new file mode 100644 index 0000000..4bfad63 --- /dev/null +++ b/less/icons/R.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/less/icons/vec-alldice-jp.svg b/less/icons/vec-alldice-jp.svg new file mode 100644 index 0000000..0fec769 --- /dev/null +++ b/less/icons/vec-alldice-jp.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D4 + + + + + + + + + + D8 + + + + + + + D6 + + + + + + + + + + + + D10 + + + + + + + + + + + + + D12 + + + + + + + + + + + + D20 + + + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 14 + + + + + + 15 + + + + + + 16 + + + + + + 17 + + + + + + 18 + + + + + + 19 + + + + + + 20 + + + + + + 4 + + + + + + 5 + + + + + + 6 + + + + + + 7 + + + + + + 8 + + + + + + 9 + + + + + + 10 + + + + + + 11 + + + + + + 12 + + + + + + 13 + + + + + + 40 + + + + + + 50 + + + + + + 60 + + + + + + 70 + + + + + + 80 + + + + + + 90 + + + + + + 0 + + + + + + 00 + + + + + + 30 + + + + + + * + + + + + + X + + + + + + - + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + \ No newline at end of file diff --git a/less/rmss.less b/less/rmss.less index 93ac91f..1ad38b1 100644 --- a/less/rmss.less +++ b/less/rmss.less @@ -16,5 +16,9 @@ @import "./skillcat-sheet/skillcat-sheet.less"; @import "./skillcat-sheet/applicable-stats-grid.less"; +//Apps + +@import "./tools/dice-roller.less"; + // Generics @import "./item-sheet.less"; \ No newline at end of file diff --git a/less/skillcat-sheet/skillcat-sheet.less b/less/skillcat-sheet/skillcat-sheet.less index 48139e6..342fdff 100644 --- a/less/skillcat-sheet/skillcat-sheet.less +++ b/less/skillcat-sheet/skillcat-sheet.less @@ -1,3 +1,10 @@ +//.skillcat-icons { +// display: flex; +// justify-content: space-around; +// flex-direction: row; +// align-items: center; +//} + .skillcat-name, .skill-name, .item-name, .spell-name, .equipable-name { font-family: Signika, sans-serif; font-size: 12px; diff --git a/less/tools/dice-roller.less b/less/tools/dice-roller.less new file mode 100644 index 0000000..158cd22 --- /dev/null +++ b/less/tools/dice-roller.less @@ -0,0 +1,20 @@ +.dice-roller-options { + display: flex; + flex-direction: column; +} + +.dice-roller-item { + display: flex; + align-items: center; + margin:5px; +} + +.dice-roller-item div { + flex: 1; +} + +.roll-button-container { + display: flex; + flex-direction: column; + justify-content: flex-end; +} \ No newline at end of file diff --git a/module/controls.js b/module/controls.js new file mode 100644 index 0000000..311503d --- /dev/null +++ b/module/controls.js @@ -0,0 +1,26 @@ + +export function registerGetSceneControlButtonsHook() { + Hooks.on("getSceneControlButtons", getSceneControlButtons); +} + +function getSceneControlButtons(controls) { + if (canvas == null) { + return; + } + controls.push({ + name: "fvtt-rolemaster-frp", + title: "Rolemaster FRP System", + icon: "fas fa-r", + layer: "ControlsLayer", + tools: [ + { + name: "rmmsdiceroller", + title: "Dice Roller", + icon: "fas fa-dice", + onClick: () => { return new game.rmss.applications.RMSSToolsDiceRoller().render(true); }, + button: true + } + ], + activeTool: "rmmsdiceroller" + }); +} diff --git a/module/documents/actor.js b/module/documents/actor.js index 23e47d6..cb4edb8 100644 --- a/module/documents/actor.js +++ b/module/documents/actor.js @@ -27,6 +27,8 @@ export class RMSSActor extends Actor { _prepareCharacterData(actorData) { if (actorData.type !== "character") return; + this.calculateBasicStatBonus(actorData); + // Calculate Stat Bonuses for the Actor this.calculateStatBonuses(actorData); @@ -51,6 +53,56 @@ export class RMSSActor extends Actor { const data = actorData.data; } + // This checks to see if you have a Rollable Table called "Basic Stat Bonus Table" and uses it to calculate the basic stat bonuses. + calculateBasicStatBonus(actorData) { + const systemData = actorData.system; + for (const table of game.tables) { + if (table.name === "Basic Stat Bonus Table") { + for (const result of table.results) { + if (actorData.system.stats.agility.temp >= Number(result.range[0]) && actorData.system.stats.agility.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.agility.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.constitution.temp >= Number(result.range[0]) && actorData.system.stats.constitution.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.constitution.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.memory.temp >= Number(result.range[0]) && actorData.system.stats.memory.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.memory.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.reasoning.temp >= Number(result.range[0]) && actorData.system.stats.reasoning.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.reasoning.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.self_discipline.temp >= Number(result.range[0]) && actorData.system.stats.self_discipline.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.self_discipline.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.empathy.temp >= Number(result.range[0]) && actorData.system.stats.empathy.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.empathy.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.intuition.temp >= Number(result.range[0]) && actorData.system.stats.intuition.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.intuition.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.presence.temp >= Number(result.range[0]) && actorData.system.stats.presence.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.presence.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.quickness.temp >= Number(result.range[0]) && actorData.system.stats.quickness.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.quickness.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.strength.temp >= Number(result.range[0]) && actorData.system.stats.strength.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.strength.basic_bonus = parseInt(result.text, 10); + } + } + } + } + } + // Tally each stat bonus and populate the total field. calculateStatBonuses(actorData) { const systemData = actorData.system; diff --git a/module/documents/item.js b/module/documents/item.js index 7f88db9..18ef11e 100644 --- a/module/documents/item.js +++ b/module/documents/item.js @@ -105,12 +105,14 @@ export class RMSSItem extends Item { } else { - const items = this.parent.items; + const items = this.parent?.items; console.log(`rmss | item.js | Skill ${this.name} has owner, calculating skill category bonus.`); - for (const item of items) { - if (item.type === "skill_category" && item._id === itemData.system.category) { - console.log(`rmss | item.js | Calculating Skill Category bonus for skill: ${this.name}`); - this.system.category_bonus = item.system.total_bonus; + if (items) { + for (const item of items) { + if (item.type === "skill_category" && item._id === itemData.system.category) { + console.log(`rmss | item.js | Calculating Skill Category bonus for skill: ${this.name}`); + this.system.category_bonus = item.system.total_bonus; + } } } } diff --git a/module/sheets/actors/rmss_player_sheet.js b/module/sheets/actors/rmss_player_sheet.js index f562780..a3c2434 100644 --- a/module/sheets/actors/rmss_player_sheet.js +++ b/module/sheets/actors/rmss_player_sheet.js @@ -202,7 +202,7 @@ export default class RMSSPlayerSheet extends ActorSheet { async renderCharacterSettings(data) { console.log(data); - const configSheet = await renderTemplate("systems/fvtt-rolemaster-frp/templates/sheets/actors/dialogs/actor-settings.html", data); + const configSheet = await renderTemplate("systems/fvtt-rolemaster-frp/templates/sheets/actors/dialogs/app_skill_category_importer.html", data); return (configSheet); } @@ -215,6 +215,11 @@ export default class RMSSPlayerSheet extends ActorSheet { item.sheet.render(true); }); + html.find(".item-roll").click(ev => { + const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id")); + new game.rmss.applications.RMSSToolsDiceRoller(item.name, item.system.total_bonus).render(true); + }); + // ------------------------------------------------------------- // Everything below here is only needed if the sheet is editable if (!this.isEditable) return; @@ -229,15 +234,14 @@ export default class RMSSPlayerSheet extends ActorSheet { item.delete(); }); - // Show Sheet Settings + // Show Skill Category Importer html.find(".import-skillcats").click(async ev => { let selectOptions = {}; for (const pack of game.packs) { selectOptions[pack.metadata.id] = pack.metadata.label; } - - new game.rmss.applications.RMSSActorSheetConfig(selectOptions, this.actor).render(true); + new game.rmss.applications.RMSSToolsSCImporter(selectOptions, this.actor).render(true); }); // Check/Uncheck Favorite Skill diff --git a/module/sheets/apps/rmss_dice_roller.js b/module/sheets/apps/rmss_dice_roller.js new file mode 100644 index 0000000..0aebc1a --- /dev/null +++ b/module/sheets/apps/rmss_dice_roller.js @@ -0,0 +1,85 @@ +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) { + super(); + this.itemName = itemName; + this.characterBonus = characterBonus; + 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} + ]; + } + + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ["form"], + title: "Rolemaster Dice Roller", + popOut: true, + width: 380, + height: 210, + template: "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_dice_roller.html" + }); + } + + getData() { + // Send data to the template + return { + itemName: this.itemName, + characterBonus: this.characterBonus, + selectOptions: this.rollType, + }; + } + + activateListeners(html) { + super.activateListeners(html); + } + + async _updateObject(event, formData) { + 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; + } + } +} + +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; diff --git a/module/sheets/apps/rmss_dice_roller_processing.js b/module/sheets/apps/rmss_dice_roller_processing.js new file mode 100644 index 0000000..e156454 --- /dev/null +++ b/module/sheets/apps/rmss_dice_roller_processing.js @@ -0,0 +1,131 @@ +export async function getOpenEndedRollModifier() { + return await new Roll("1d100x>95").roll(); +} + +export function processOpenEndedSixtySixRoll(baseroll, rolltype) { + // Log the Roll to Chat + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: "You rolled a 66!", + }; + + ChatMessage.create(chatOptions); +} + +export function processOpenEndedRoll(baseroll, rolltype) { + // 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 = { + baseroll: baseroll, + total: baseroll.result, + highopen: false, + lowopen: false, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} + +export async function processHighOpenEndedRoll(baseroll, rolltype) { + // Get the Base Roll followed by the High Open Ended Roll + let originalRoll = baseroll; + let openendedRoll = await this.getOpenEndedRollModifier(); + + // Create a rolls array for Dice So Nice integration. + let rolls = [originalRoll, openendedRoll]; + + // Create an Array to hold the High Open Ended Roll Results and set the total to base roll + let openendedResults = []; + let total = Number(originalRoll.result); + + // Each time the High Open Ended Roll is triggered add the result to an array and add it to the total. + for (const rollResult of openendedRoll.dice[0].results) { + openendedResults.push(rollResult.result); + total = total + Number(rollResult.result); + } + + // 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 = { + baseroll: baseroll, + opeendedresults: [openendedResults], + highopen: true, + lowopen: false, + total: total, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + style: CONST.CHAT_MESSAGE_STYLES.ROLL, + rolls: rolls, + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} + +export async function processLowOpenEndedRoll(baseroll, rolltype) { + // Get the Base Roll followed by the Low Open Ended Roll + let originalRoll = baseroll; + let openendedRoll = await this.getOpenEndedRollModifier(); + + // Create a rolls array for Dice So Nice integration. + let rolls = [originalRoll, openendedRoll]; + + // Create an Array to hold the Low Open Ended Roll Results and set the total to base roll + let openendedResults = []; + let total = Number(originalRoll.result); + + // Each time the Low Open Ended Roll is triggered add the result to an array and subtract it from the total. + for (const rollResult of openendedRoll.dice[0].results) { + openendedResults.push(rollResult.result); + total = total - Number(rollResult.result); + } + + // 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 = { + baseroll: baseroll, + rolls: rolls, + opeendedresults: [openendedResults], + highopen: false, + lowopen: true, + total: total, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + style: CONST.CHAT_MESSAGE_STYLES.ROLL, + rolls: rolls, + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} diff --git a/module/sheets/apps/rmss_dice_roller_rolls.js b/module/sheets/apps/rmss_dice_roller_rolls.js new file mode 100644 index 0000000..21bff32 --- /dev/null +++ b/module/sheets/apps/rmss_dice_roller_rolls.js @@ -0,0 +1,71 @@ +export async function roll_one_to_onehundred() { + // Construct the Roll instance + let baseroll = await new Roll("1d100 + @characterBonus", {characterBonus: this.characterBonus}).roll({async: true}); + let rolltype = "Roll Type: 1-100"; + + // Log the Roll to Chat + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode") + }; + + ChatMessage.create(chatOptions); + this.close(); +}; + +export async function roll_low_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: Low Open-Ended"; + + switch (true) { + case (baseroll.result < 6): + this.processLowOpenEndedRoll(baseroll, rolltype); + break; + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} + +export async function roll_high_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: High Open-Ended"; + switch (true) { + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + case (baseroll.result > 95): + this.processHighOpenEndedRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} + +export async function roll_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: Open-Ended"; + switch (true) { + case (baseroll.result < 6): + this.processLowOpenEndedRoll(baseroll, rolltype); + break; + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + case (baseroll.result > 95): + this.processHighOpenEndedRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} diff --git a/module/sheets/apps/rmss_import_skill_categories.js b/module/sheets/apps/rmss_import_skill_categories.js new file mode 100644 index 0000000..da85e50 --- /dev/null +++ b/module/sheets/apps/rmss_import_skill_categories.js @@ -0,0 +1,56 @@ +export default class RMSSToolsSCImporter extends FormApplication { + + constructor(selectOptions, character) { + super(); + this.selectOptions = selectOptions; + this.character = character; + } + + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ["form"], + popOut: true, + title: "Import Skill Categories", + template: "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_skill_category_importer.html" + }); + } + + getData() { + // Send data to the template + return { + selectOptions: this.selectOptions + }; + } + + activateListeners(html) { + super.activateListeners(html); + } + + async _updateObject(event, formData) { + console.log("Deleting Old Skill Categories."); + for (const item of this.character.items) { + if (item.type === "skill_category") { + item.delete(); + } + } + + const pack = game.packs.get(formData.selectOptions); + const skillCategoryData = await pack.getIndex(); + + console.log("Importing New Skill Categories."); + + for (const sc of skillCategoryData) { + const newitem = await pack.getDocument(sc._id); + + let newDocuments = []; + if (newitem.type === "skill_category") { + console.log(newitem); + newDocuments.push(newitem); + } + if (newDocuments.length > 0) { + await Item.createDocuments(newDocuments, {parent: this.character}); + } + } + } +} + diff --git a/packs/skill_categories/000004.log b/packs/skill_categories/000008.log similarity index 100% rename from packs/skill_categories/000004.log rename to packs/skill_categories/000008.log diff --git a/packs/skill_categories/CURRENT b/packs/skill_categories/CURRENT index 1a84852..f7753e2 100644 --- a/packs/skill_categories/CURRENT +++ b/packs/skill_categories/CURRENT @@ -1 +1 @@ -MANIFEST-000002 +MANIFEST-000006 diff --git a/packs/skill_categories/LOG b/packs/skill_categories/LOG index 7f95692..07bacba 100644 --- a/packs/skill_categories/LOG +++ b/packs/skill_categories/LOG @@ -1,5 +1,8 @@ -2024/07/26-09:38:09.968297 7f70fa0006c0 Delete type=3 #1 -2024/07/26-09:40:38.576572 7f70f3e006c0 Level-0 table #5: started -2024/07/26-09:40:38.595934 7f70f3e006c0 Level-0 table #5: 24247 bytes OK -2024/07/26-09:40:38.633153 7f70f3e006c0 Delete type=0 #3 -2024/07/26-09:40:38.675601 7f70f3e006c0 Manual compaction at level-0 from '!items!1HevhbCbvMonyQXe' @ 72057594037927935 : 1 .. '!items!yRIFroc5VC9Oj3qY' @ 0 : 0; will stop at (end) +2024/07/26-13:01:33.184951 7f70fa0006c0 Recovering log #4 +2024/07/26-13:01:33.276590 7f70fa0006c0 Delete type=0 #4 +2024/07/26-13:01:33.276711 7f70fa0006c0 Delete type=3 #2 +2024/07/26-14:15:40.712242 7f70f3e006c0 Level-0 table #9: started +2024/07/26-14:15:40.712297 7f70f3e006c0 Level-0 table #9: 0 bytes OK +2024/07/26-14:15:40.750893 7f70f3e006c0 Delete type=0 #7 +2024/07/26-14:15:40.806643 7f70f3e006c0 Manual compaction at level-0 from '!items!1HevhbCbvMonyQXe' @ 72057594037927935 : 1 .. '!items!yRIFroc5VC9Oj3qY' @ 0 : 0; will stop at (end) +2024/07/26-14:15:40.863267 7f70f3e006c0 Manual compaction at level-1 from '!items!1HevhbCbvMonyQXe' @ 72057594037927935 : 1 .. '!items!yRIFroc5VC9Oj3qY' @ 0 : 0; will stop at (end) diff --git a/packs/skill_categories/LOG.old b/packs/skill_categories/LOG.old new file mode 100644 index 0000000..7f95692 --- /dev/null +++ b/packs/skill_categories/LOG.old @@ -0,0 +1,5 @@ +2024/07/26-09:38:09.968297 7f70fa0006c0 Delete type=3 #1 +2024/07/26-09:40:38.576572 7f70f3e006c0 Level-0 table #5: started +2024/07/26-09:40:38.595934 7f70f3e006c0 Level-0 table #5: 24247 bytes OK +2024/07/26-09:40:38.633153 7f70f3e006c0 Delete type=0 #3 +2024/07/26-09:40:38.675601 7f70f3e006c0 Manual compaction at level-0 from '!items!1HevhbCbvMonyQXe' @ 72057594037927935 : 1 .. '!items!yRIFroc5VC9Oj3qY' @ 0 : 0; will stop at (end) diff --git a/packs/skill_categories/MANIFEST-000002 b/packs/skill_categories/MANIFEST-000002 deleted file mode 100644 index af87e5bc55b72e4a6e8b66a0ea50313ba6481fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAe$kRS-TOEg7@3$k8JJmE z7;el@3Gf4QS%6$NmMnHA*6n*4677@62P V8JIa(vfj2#>;-W-fLtz?EC4K*BuoGR literal 0 HcmV?d00001 diff --git a/rmss.css b/rmss.css index 04c8b12..653de51 100644 --- a/rmss.css +++ b/rmss.css @@ -11,7 +11,6 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; justify-content: center; } .skillcat-grid-container > div:nth-child(24n+1), @@ -34,7 +33,6 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; justify-content: center; background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0); } @@ -46,6 +44,11 @@ .container { display: flex; } +.rm-heading { + font-size: 1em; + font-family: PragRoman; + border-bottom: 0px; +} .actor-icon { flex-shrink: 1; } @@ -505,6 +508,23 @@ flex-direction: column; justify-content: center; } +.dice-roller-options { + display: flex; + flex-direction: column; +} +.dice-roller-item { + display: flex; + align-items: center; + margin: 5px; +} +.dice-roller-item div { + flex: 1; +} +.roll-button-container { + display: flex; + flex-direction: column; + justify-content: flex-end; +} .sheet form { display: flex; flex-direction: column; diff --git a/rmss.js b/rmss.js index 7f20a96..a279ab2 100644 --- a/rmss.js +++ b/rmss.js @@ -1,5 +1,6 @@ // Import Configuration Object import { rmss } from "./module/config.js"; +//import { registerGetSceneControlButtonsHook } from "./module/controls.js"; // Import document classes. import { RMSSActor } from "./module/documents/actor.js"; @@ -16,7 +17,8 @@ import RMSSSkillCategorySheet from "./module/sheets/skills/rmss_skill_category_s import RMSSSkillSheet from "./module/sheets/skills/rmss_skill_sheet.js"; import RMSSPlayerSheet from "./module/sheets/actors/rmss_player_sheet.js"; -import RMSSActorSheetConfig from "./module/sheets/actors/rmss_player_sheet_config.js"; +import RMSSToolsSCImporter from "./module/sheets/apps/rmss_import_skill_categories.js"; +import RMSSToolsDiceRoller from "./module/sheets/apps/rmss_dice_roller.js"; /** Preload handlebars templates for character sheets */ async function preloadHandlebarsTemplates() { @@ -41,11 +43,14 @@ async function preloadHandlebarsTemplates() { "systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-spells.html", "systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fav-spells.html", "systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fav-items.html", - "systems/fvtt-rolemaster-frp/templates/sheets/actors/apps/actor-settings.html" + "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_skill_category_importer.html" ]; return loadTemplates(templatePaths); } +// Register Scene Controls +// registerGetSceneControlButtonsHook(); + // Hook the init function and set up our system Hooks.once("init", function() { console.log("rmss | Initialising Rolemaster Standard System"); @@ -56,7 +61,8 @@ Hooks.once("init", function() { RMSSActor, RMSSItem, applications: { - RMSSActorSheetConfig + RMSSToolsSCImporter, + RMSSToolsDiceRoller } }; @@ -64,6 +70,14 @@ Hooks.once("init", function() { CONFIG.Actor.documentClass = RMSSActor; CONFIG.Item.documentClass = RMSSItem; + // Add PragRoman Font + CONFIG.fontDefinitions["PragRoman"] = { + editor: true, + fonts: [ + {urls: ["systems/fvtt-rolemaster-frp/assets/fonts/PragRoman.woff2"]} + ] + }; + // Make Config Data Available CONFIG.rmss = rmss; @@ -77,21 +91,21 @@ Hooks.once("init", function() { console.log("rmss | Registering RMSS sheets"); // Items - Items.registerSheet("rmss", RMSSItemSheet, {makeDefault: true, label: "rmss.entity_sheet.item", types: ["item"]}); - Items.registerSheet("rmss", RMSSArmorSheet, {makeDefault: true, label: "rmss.entity_sheet.armor", types: ["armor"]}); - Items.registerSheet("rmss", RMSSTransportSheet, {makeDefault: true, label: "rmss.entity_sheet.transport", types: ["transport"]}); - Items.registerSheet("rmss", RMSSWeaponSheet, {makeDefault: true, label: "rmss.entity_sheet.weapon", types: ["weapon"]}); - Items.registerSheet("rmss", RMSSHerbOrPoisonSheet, {makeDefault: true, label: "rmss.entity_sheet.herb_or_poison", types: ["herb_or_poison"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSItemSheet, {makeDefault: true, label: "rmss.entity_sheet.item", types: ["item"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSArmorSheet, {makeDefault: true, label: "rmss.entity_sheet.armor", types: ["armor"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSTransportSheet, {makeDefault: true, label: "rmss.entity_sheet.transport", types: ["transport"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSWeaponSheet, {makeDefault: true, label: "rmss.entity_sheet.weapon", types: ["weapon"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSHerbOrPoisonSheet, {makeDefault: true, label: "rmss.entity_sheet.herb_or_poison", types: ["herb_or_poison"]}); // Spells - Items.registerSheet("rmss", RMSSSpellSheet, {makeDefault: true, label: "rmss.entity_sheet.spell", types: ["spell"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSSpellSheet, {makeDefault: true, label: "rmss.entity_sheet.spell", types: ["spell"]}); // Skills - Items.registerSheet("rmss", RMSSSkillCategorySheet, {makeDefault: true, label: "rmss.entity_sheet.skill_category", types: ["skill_category"]}); - Items.registerSheet("rmss", RMSSSkillSheet, {makeDefault: true, label: "rmss.entity_sheet.skill", types: ["skill"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSSkillCategorySheet, {makeDefault: true, label: "rmss.entity_sheet.skill_category", types: ["skill_category"]}); + Items.registerSheet("fvtt-rolemaster-frp", RMSSSkillSheet, {makeDefault: true, label: "rmss.entity_sheet.skill", types: ["skill"]}); // Actors - Actors.registerSheet("rmss", RMSSPlayerSheet, {makeDefault: true, label: "rmss.entity_sheet.player_characrer", types: ["character"]}); + Actors.registerSheet("fvtt-rolemaster-frp", RMSSPlayerSheet, {makeDefault: true, label: "rmss.entity_sheet.player_characrer", types: ["character"]}); // Preload Handlebars Templates console.log("rmss | Preloading Handlebars Templates"); diff --git a/templates/chat/chat_dice_roll.html b/templates/chat/chat_dice_roll.html new file mode 100644 index 0000000..64a5896 --- /dev/null +++ b/templates/chat/chat_dice_roll.html @@ -0,0 +1,28 @@ +

\ No newline at end of file diff --git a/templates/sheets/actors/parts/actor-skill-categories.html b/templates/sheets/actors/parts/actor-skill-categories.html index 50f7b77..f971ad1 100644 --- a/templates/sheets/actors/parts/actor-skill-categories.html +++ b/templates/sheets/actors/parts/actor-skill-categories.html @@ -34,9 +34,10 @@
{{skill_category.system.special_bonus_1}}
{{skill_category.system.special_bonus_2}}
{{skill_category.system.total_bonus}}
-
+
+
{{/each}}
\ No newline at end of file diff --git a/templates/sheets/apps/app_dice_roller.html b/templates/sheets/apps/app_dice_roller.html new file mode 100644 index 0000000..e3dd5d4 --- /dev/null +++ b/templates/sheets/apps/app_dice_roller.html @@ -0,0 +1,27 @@ +
+
+
+
+
Rolling for:
{{itemName}}
+
+
+
Character Bonus:
{{characterBonus}}
+
+
+
Misc Bonus:
+
+
+
Select Roll Type:
+
+ +
+
+
+ +
+
+ \ No newline at end of file diff --git a/templates/sheets/apps/app_skill_category_importer.html b/templates/sheets/apps/app_skill_category_importer.html new file mode 100644 index 0000000..d6187d1 --- /dev/null +++ b/templates/sheets/apps/app_skill_category_importer.html @@ -0,0 +1,17 @@ +
+
+

Import Skill Categories

+
+ WARNING: This will erase your existing Skill Categories and import all Skill Categories from the selected Compendium. +
+
+ Select Compendium: +
+
+ +
+ +
+
\ No newline at end of file