diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ce9fde..210b388 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,8 +3,9 @@ ## 1.7.0 - DiceRoller for Techniques & Npc Generator - NPC Sheet : - Added a random generator feature (Demeanor, Clan and Families names courteously authorized by Edge). + - This is random by design, don't expect clan logic in values. - PC/NPC sheet: - - Added the ability to techniques, with a skill set, to open the DicePicker with presets values. + - Added the ability for technique with a skill set, to open the DicePicker with presets values. - Some can interact with targets, but do the default difficulty if none. - Notes : Techniques in sheet need to be re-imported from the compendium or manually updated for this to work. - Compendiums : @@ -13,25 +14,25 @@ - Added TN hidden difficulty visibility for GM (ex: ?2?). - Added a selection for techniques with skill list. - RnK : - - Added ability to apply the strife to the actor on final step. The chat message show the value taken in gray aside the total strife. + - Added ability to directly apply the strife to the actor on final step. The chat message show the value taken in gray aside the total strife. -Syntaxe quick explanation : +Technique syntaxe "quick" explanation : - Difficulty can be : - Number : 1-9 - Or specific syntaxe "@`S`:`prop1`" or "@`T`:`prop1`|`max`" or "@`T`:`prop1`|`max`(`prop2`)" : - `@` fixed, trigger the parser - `T` or `S` : `T`arget or `S`elf, define the actor to get the value. - - `prop1` / `prop2` : Can be any property in `actor` or `actor.data.data`. + - `prop1` / `prop2` : Can be any property in `actor` or `actor.data.data`. Limitations: currently no `size` or `distance` (range). - `|` separator, optional if no min/max. - `min` or `max` : Between the selected targets search for the min/max of `prop2`. If no `prop2` found, take `prop1` as `prop2` (irrelevant for `@S`). - `(prop2)` : define the property for the actor selection in multiple target, can be omitted if same as `prop1`. - Exemples : - `@S:vigilance` : Difficulty will be my own vigilance - `@T:vigilance|min` : Difficulty will be the vigilance from the target with the minimum vigilance (implicit) value. it's the same to wrote `@T:vigilance|min(vigilance)`. - - `@T:vigilance|max(statusRank)` : Difficulty will be the vigilance from the target with the maximum statusRank value + - `@T:vigilance|max(statusRank)` : Difficulty will be the vigilance from the target with the maximum `statusRank` value. - Skill can be : - - Skill id : `melee`, `fitness`... - - Skill category id : `scholar`, `martial`... + - SkillId : `melee`, `fitness`... + - SkillCategoryId : `scholar`, `martial`... - Or both in list, coma separated. - Ids are english names in lower case, see `config.js / L5R5E.skills` for the list. - Exemples : diff --git a/system/scripts/dice/roll-n-keep-dialog.js b/system/scripts/dice/roll-n-keep-dialog.js index 694ce78..27fcf8a 100644 --- a/system/scripts/dice/roll-n-keep-dialog.js +++ b/system/scripts/dice/roll-n-keep-dialog.js @@ -218,24 +218,27 @@ export class RollnKeepDialog extends FormApplication { * @return {Object} */ getData(options = null) { + const rollData = this.roll.l5r5e; + // Disable submit / edition this.options.classes = this.options.classes.filter((e) => e !== "finalized"); this.object.submitDisabled = false; if (this._checkKeepCount(this.object.currentStep)) { const kept = this._getKeepCount(this.object.currentStep); - this.object.submitDisabled = kept < 1 || kept > this.roll.l5r5e.keepLimit; + this.object.submitDisabled = kept < 1 || kept > rollData.keepLimit; } else if (!this.object.dicesList[this.object.currentStep]) { - this.options.editable = this.roll.l5r5e.summary.strife > 0; + this.options.editable = rollData.summary.strife > 0; this.options.classes.push("finalized"); } return { ...super.getData(options), isGM: game.user.isGM, + showStrifeBt: rollData.summary.strife > 0 && rollData.actor, cssClass: this.options.classes.join(" "), data: this.object, - l5r5e: this.roll.l5r5e, + l5r5e: rollData, }; } @@ -681,7 +684,7 @@ export class RollnKeepDialog extends FormApplication { // Apply strife to actor const strifeApplied = Math.min(this.roll.l5r5e.summary.strife, Math.max(0, formData.strifeApplied)); const actorMod = strifeApplied - this.roll.l5r5e.strifeApplied; - if (actorMod !== 0) { + if (actorMod !== 0 && this.roll.l5r5e.actor) { await this.roll.l5r5e.actor.update({ data: { strife: { @@ -689,12 +692,10 @@ export class RollnKeepDialog extends FormApplication { }, }, }); + // Update the roll & send to chat + this.roll.l5r5e.strifeApplied = strifeApplied; + await this._toChatMessage(); } - - // Update the roll & send to chat - this.roll.l5r5e.strifeApplied = strifeApplied; - await this._rebuildRoll(false); - await this._toChatMessage(); return this.close(); } diff --git a/system/scripts/dice/roll.js b/system/scripts/dice/roll.js index c71182f..7fc3024 100644 --- a/system/scripts/dice/roll.js +++ b/system/scripts/dice/roll.js @@ -252,7 +252,6 @@ export class RollL5r5e extends Roll { if (!this._evaluated) { await this.roll(); } - console.log(this.l5r5e); // Define chat data const chatData = { @@ -261,8 +260,9 @@ export class RollL5r5e extends Roll { user: chatOptions.user, isPublicRoll: !isPrivate, tooltip: isPrivate ? "" : await this.getTooltip({ from: "render" }), - total: isPrivate ? "?" : Math.round(this._total * 100) / 100, - data: this.data, + total: isPrivate ? "?" : this.total, + //data: this.data, + profileImg: this.l5r5e.actor?.img ? this.l5r5e.actor?.img : "icons/svg/mystery-man.svg", l5r5e: isPrivate ? {} : { @@ -309,12 +309,15 @@ export class RollL5r5e extends Roll { messageData = ChatMessage.applyRollMode(messageData, rMode); } + // Force the content to avoid weird foundry behaviour + const content = this.l5r5e.dicesTypes.l5r ? await this.render({}) : this.total; + // Prepare chat data messageData = foundry.utils.mergeObject( { user: game.user.id, type: CONST.CHAT_MESSAGE_TYPES.ROLL, - content: this._total, + content, sound: CONFIG.sounds.dice, speaker: { actor: this.l5r5e.actor?.id || null, @@ -330,7 +333,6 @@ export class RollL5r5e extends Roll { const message = await ChatMessage.implementation.create(messageData, { rollMode: rMode, temporary: !create, - isL5r5eTemplate: true, }); return create ? message : message.data; } diff --git a/system/scripts/helpers.js b/system/scripts/helpers.js index dd359d5..d56e0ee 100644 --- a/system/scripts/helpers.js +++ b/system/scripts/helpers.js @@ -820,7 +820,6 @@ export class HelpersL5r5e { // execute a function when someone clicks in the document html.on("focusout", (e) => { - console.log("aaaaaaaaaa"); closeAllLists(e.target); }); } diff --git a/system/scripts/hooks.js b/system/scripts/hooks.js index 5b9c267..6c4c472 100644 --- a/system/scripts/hooks.js +++ b/system/scripts/hooks.js @@ -56,39 +56,6 @@ export default class HooksL5r5e { }); } - /** - * Modify the content for chat roll command - * - * The 0.8.x introduce a weird behavior, it get to roll.total as content event if a template was defined. - * So we need to intercept a chat roll (/r 1dr) for having them use the right template and not the inline (=total) - * - * @param {ChatMessage} document - * @param {Object} data - * @param {Object} options - * @param {string} userId - * @return {boolean} - */ - static async preCreateChatMessage(document, data, options, userId) { - // Roll from DP have the "isL5r5eTemplate" option set - if (!document.isRoll || options?.isL5r5eTemplate || !document.data?.roll) { - return; - } - - // Get the roll object - const roll = game.l5r5e.RollL5r5e.fromJSON(document.data.roll); - - // Ignore non l5r roll (std or table) - if (!roll.l5r5e?.dicesTypes?.l5r) { - return; - } - - // So now we have our wrong message only, redo it using the roll - await roll.toMessage(); - - // Return false to let the system known we handled this - return false; - } - /** * Chat Message */ diff --git a/system/scripts/main-l5r5e.js b/system/scripts/main-l5r5e.js index a9aef08..f6b78ab 100644 --- a/system/scripts/main-l5r5e.js +++ b/system/scripts/main-l5r5e.js @@ -248,6 +248,3 @@ Hooks.on("renderChatMessage", (message, html, data) => HooksL5r5e.renderChatMess Hooks.on("renderCombatTracker", (app, html, data) => HooksL5r5e.renderCombatTracker(app, html, data)); Hooks.on("renderCompendium", async (app, html, data) => HooksL5r5e.renderCompendium(app, html, data)); Hooks.on("diceSoNiceRollStart", (messageId, context) => HooksL5r5e.diceSoNiceRollStart(messageId, context)); - -// TODO Seem fixed in v9, remove in v10 if good -// Hooks.on("preCreateChatMessage", (document, data, options, userId) => HooksL5r5e.preCreateChatMessage(document, data, options, userId)); diff --git a/system/templates/dice/chat-roll.html b/system/templates/dice/chat-roll.html index 2d671d4..9a3abc4 100644 --- a/system/templates/dice/chat-roll.html +++ b/system/templates/dice/chat-roll.html @@ -5,7 +5,7 @@
- {{#if l5r5e.actor.name}}{{l5r5e.actor.name}}{{else}}mystery-man{{/if}} + {{#if l5r5e.actor.name}}{{l5r5e.actor.name}}{{else}}mystery-man{{/if}} @@ -106,7 +106,7 @@
{{{tooltip}}} -

{{total}}

+

{{{total}}}

{{/if}} diff --git a/system/templates/dice/roll-n-keep-dialog.html b/system/templates/dice/roll-n-keep-dialog.html index 84dc05d..478743b 100644 --- a/system/templates/dice/roll-n-keep-dialog.html +++ b/system/templates/dice/roll-n-keep-dialog.html @@ -138,7 +138,7 @@ {{/each}} {{!-- Strife selection --}} - {{#if l5r5e.summary.strife}} + {{#if showStrifeBt}}