fixing some roll template bugs

This commit is contained in:
Vlyan
2022-02-13 17:02:04 +01:00
parent 8c4072d8af
commit f640949016
8 changed files with 28 additions and 61 deletions

View File

@@ -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();
}

View File

@@ -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;
}

View File

@@ -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);
});
}

View File

@@ -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
*/

View File

@@ -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));

View File

@@ -5,7 +5,7 @@
<div class="l5r5e profil">
<header class="part-header flexrow chat-profil">
<span class="chat-profil-element">
<img class="profile-img" src="{{#if l5r5e.actor.img}}{{l5r5e.actor.img}}{{else}}icons/svg/mystery-man.svg{{/if}}" data-edit="img" alt="{{#if l5r5e.actor.name}}{{l5r5e.actor.name}}{{else}}mystery-man{{/if}}" />
<img class="profile-img" src="{{profileImg}}" data-edit="img" alt="{{#if l5r5e.actor.name}}{{l5r5e.actor.name}}{{else}}mystery-man{{/if}}" />
</span>
<span class="chat-profil-element">
@@ -106,7 +106,7 @@
</div>
{{{tooltip}}}
<h4 class="l5r5e dice-total dice-total-std">{{total}}</h4>
<h4 class="l5r5e dice-total dice-total-std">{{{total}}}</h4>
{{/if}}
</div>

View File

@@ -138,7 +138,7 @@
{{/each}}
</table>
{{!-- Strife selection --}}
{{#if l5r5e.summary.strife}}
{{#if showStrifeBt}}
<div class="form-group" style="width: 100%;">
<div class="form-fields"></div>
<div class="form-fields">