diff --git a/module/item-sheet.js b/module/item-sheet.js index 00c300ec..c8d20b98 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -32,7 +32,7 @@ export class RdDItemSheet extends ItemSheet { { class: "post", icon: "fas fa-comment", - onclick: ev => new RdDItem(Misc.data(this.item)).postItem() + onclick: ev => this.item.postItem() }) return buttons } diff --git a/module/item.js b/module/item.js index 7a3c52c9..ab7f8ec3 100644 --- a/module/item.js +++ b/module/item.js @@ -16,15 +16,14 @@ export class RdDItem extends Item { prepareDerivedData() { super.prepareDerivedData(); - const itemData = this.data; - if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) { - this._calculsEquipement(itemData); + if (RdDItem.getTypeObjetsEquipement().includes(Misc.data(this).type)) { + this._calculsEquipement(); } } - - _calculsEquipement(itemData) { - const tplData = itemData.data; - const quantite = itemData.type == 'conteneur' ? 1 : (tplData.quantite ?? 0); + + _calculsEquipement() { + const tplData = Misc.templateData(this); + const quantite = Misc.data(this).type == 'conteneur' ? 1 : (tplData.quantite ?? 0); if (tplData.encombrement != undefined) { tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite; } @@ -33,12 +32,25 @@ export class RdDItem extends Item { } } + + async diminuerQuantite(nombre, options = { diminuerQuantite: true }) { + if (!options.diminuerQuantite) return; + const itemData = Misc.data(this); + const quantite = itemData.data.quantite; + if (quantite != undefined) { + const reste = Math.max(quantite - nombre, 0); + ui.notifications.notify(`Quantité de ${itemData.name} réduite de ${nombre}.${reste == 0 + ? "Il ne vous en reste plus, vous pouvez le supprimer de votre équipement, ou trouver un moyen de vous en procurer." + : ""}`); + await this.update({ "data.quantite": reste }); + } + } + /* -------------------------------------------- */ async postItem() { console.log(this); - const properties = this[`_${this.data.type}ChatData`](); - const itemData = Misc.data(this); - let chatData = duplicate(itemData); + let chatData = duplicate(Misc.data(this)); + const properties = this[`_${chatData.type}ChatData`](); chatData["properties"] = properties //Check if the posted item should have availability/pay buttons @@ -47,8 +59,7 @@ export class RdDItem extends Item { let dialogResult = [-1, -1]; // dialogResult[0] = quantité, dialogResult[1] = prix if (chatData.hasPrice) { - let sols = chatData.data.cout; - chatData.data.cout_deniers = Math.floor(sols * 100); + chatData.data.cout_deniers = Math.floor(chatData.data.cout * 100); dialogResult = await new Promise((resolve, reject) => { new Dialog({ content: @@ -68,7 +79,7 @@ export class RdDItem extends Item { post: { label: "Soumettre", callback: (dlg) => { - resolve([dlg.find('[name="quantity"]').val(), dlg.find('[name="price"]').val()]) + resolve([Number(dlg.find('[name="quantity"]').val()), Number(dlg.find('[name="price"]').val())]) } }, } @@ -76,28 +87,29 @@ export class RdDItem extends Item { }) } - if (dialogResult[0] > 0) { + let quantiteEnvoi = Math.min(dialogResult[0], chatData.data.quantite); + const prixTotal = dialogResult[1]; + if (quantiteEnvoi > 0) { if (this.isOwned) { - if (itemData.data.quantite == 0) - dialogResult[0] = -1 - else if (itemData.data.quantite < dialogResult[0]) { - dialogResult[0] = itemData.data.quantite; - ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${dialogResult[0]}.`) - this.update({ "data.quantite": 0 }) + if (chatData.data.quantite == 0) { + quantiteEnvoi = -1 } - else { - ui.notifications.notify(`Quantité réduite par ${dialogResult[0]}.`) - this.update({ "data.quantite": itemData.data.quantite - dialogResult[0] }) + else if (quantiteEnvoi > chatData.data.quantite) { + quantiteEnvoi = chatData.data.quantite; + ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${quantiteEnvoi}.`) + } + if (quantiteEnvoi > 0) { + this.diminuerQuantite(quantiteEnvoi); } } } if (chatData.hasPrice) { - if (dialogResult[0] > 0) - chatData.postQuantity = Number(dialogResult[0]); - if (dialogResult[1] > 0) { - chatData.postPrice = dialogResult[1]; - chatData.data.cout_deniers = Math.floor(dialogResult[1] * 100); // Mise à jour cout en deniers + if (quantiteEnvoi > 0) + chatData.postQuantity = Number(quantiteEnvoi); + if (prixTotal > 0) { + chatData.postPrice = prixTotal; + chatData.data.cout_deniers = Math.floor(prixTotal * 100); // Mise à jour cout en deniers } chatData.finalPrice = Number(chatData.postPrice) * Number(chatData.postQuantity); chatData.data.cout_deniers_total = chatData.data.cout_deniers * Number(chatData.postQuantity); @@ -112,7 +124,7 @@ export class RdDItem extends Item { chatData.jsondata = JSON.stringify( { compendium: "postedItem", - payload: itemData, + payload: chatData, }); renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-item.html', chatData).then(html => { @@ -121,219 +133,237 @@ export class RdDItem extends Item { }); } + static propertyIfDefined(name, val, condition) { + return condition ? [`${name}: ${val}`] : []; + } + /* -------------------------------------------- */ _objetChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Encombrement: ${rddData.encombrement}` + `Encombrement: ${tplData.encombrement}` ] return properties; } + + /* -------------------------------------------- */ + _nourritureboissonChatData() { + const tplData = Misc.templateData(this); + let properties = [].concat( + RdDItem.propertyIfDefined('Sustentation', tplData.sust, tplData.sust > 0), + RdDItem.propertyIfDefined('Désaltère', tplData.desaltere, tplData.boisson), + RdDItem.propertyIfDefined('Force alcool', tplData.force, tplData.boisson && tplData.alcoolise), + RdDItem.propertyIfDefined('Exotisme', tplData.qualite, tplData.qualite < 0), + RdDItem.propertyIfDefined('Qualité', tplData.qualite, tplData.qualite > 0), + [`Encombrement: ${tplData.encombrement}`], + ); + return properties; + } /* -------------------------------------------- */ _armeChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Compétence: ${rddData.competence}`, - `Dommages: ${rddData.dommages}`, - `Force minimum: ${rddData.force}`, - `Resistance: ${rddData.resistance}`, - `Encombrement: ${rddData.encombrement}` + `Compétence: ${tplData.competence}`, + `Dommages: ${tplData.dommages}`, + `Force minimum: ${tplData.force}`, + `Resistance: ${tplData.resistance}`, + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _conteneurChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Capacité: ${rddData.capacite} Enc.`, - `Encombrement: ${rddData.encombrement}` + `Capacité: ${tplData.capacite} Enc.`, + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _munitionChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Encombrement: ${rddData.encombrement}` + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _armureChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Protection: ${rddData.protection}`, - `Détérioration: ${rddData.deterioration}`, - `Malus armure: ${rddData.malus}`, - `Encombrement: ${rddData.encombrement}` + `Protection: ${tplData.protection}`, + `Détérioration: ${tplData.deterioration}`, + `Malus armure: ${tplData.malus}`, + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _competenceChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Catégorie: ${rddData.categorie}`, - `Niveau: ${rddData.niveau}`, - `Caractéristique par défaut: ${rddData.carac_defaut}`, - `XP: ${rddData.xp}` + `Catégorie: ${tplData.categorie}`, + `Niveau: ${tplData.niveau}`, + `Caractéristique par défaut: ${tplData.carac_defaut}`, + `XP: ${tplData.xp}` ] return properties; } /* -------------------------------------------- */ _competencecreatureChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Catégorie: ${rddData.categorie}`, - `Niveau: ${rddData.niveau}`, - `Caractéristique: ${rddData.carac_value}`, - `XP: ${rddData.xp}` + `Catégorie: ${tplData.categorie}`, + `Niveau: ${tplData.niveau}`, + `Caractéristique: ${tplData.carac_value}`, + `XP: ${tplData.xp}` ] return properties; } /* -------------------------------------------- */ _sortChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Draconic: ${rddData.draconic}`, - `Difficulté: ${rddData.difficulte}`, - `Case TMR: ${rddData.caseTMR}`, - `Points de Rêve: ${rddData.ptreve}` + `Draconic: ${tplData.draconic}`, + `Difficulté: ${tplData.difficulte}`, + `Case TMR: ${tplData.caseTMR}`, + `Points de Rêve: ${tplData.ptreve}` ] return properties; } /* -------------------------------------------- */ _herbeChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Milieu: ${rddData.milieu}`, - `Rareté: ${rddData.rarete}`, - `Catégorie: ${rddData.categorie}`, + `Milieu: ${tplData.milieu}`, + `Rareté: ${tplData.rarete}`, + `Catégorie: ${tplData.categorie}`, ] return properties; } /* -------------------------------------------- */ _ingredientChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Milieu: ${rddData.milieu}`, - `Rareté: ${rddData.rarete}`, - `Catégorie: ${rddData.categorie}`, + `Milieu: ${tplData.milieu}`, + `Rareté: ${tplData.rarete}`, + `Catégorie: ${tplData.categorie}`, ] return properties; } /* -------------------------------------------- */ _tacheChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Caractéristique: ${rddData.carac}`, - `Compétence: ${rddData.competence}`, - `Périodicité: ${rddData.periodicite}`, - `Fatigue: ${rddData.fatigue}`, - `Difficulté: ${rddData.difficulte}`, - `Points de Tâche: ${rddData.points_de_tache}`, - `Points de Tâche atteints: ${rddData.points_de_tache_courant}` + `Caractéristique: ${tplData.carac}`, + `Compétence: ${tplData.competence}`, + `Périodicité: ${tplData.periodicite}`, + `Fatigue: ${tplData.fatigue}`, + `Difficulté: ${tplData.difficulte}`, + `Points de Tâche: ${tplData.points_de_tache}`, + `Points de Tâche atteints: ${tplData.points_de_tache_courant}` ] return properties; } /* -------------------------------------------- */ _livreChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Compétence: ${rddData.competence}`, - `Auteur: ${rddData.auteur}`, - `Difficulté: ${rddData.difficulte}`, - `Points de Tâche: ${rddData.points_de_tache}`, - `Encombrement: ${rddData.encombrement}` + `Compétence: ${tplData.competence}`, + `Auteur: ${tplData.auteur}`, + `Difficulté: ${tplData.difficulte}`, + `Points de Tâche: ${tplData.points_de_tache}`, + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _potionChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Rareté: ${rddData.rarete}`, - `Catégorie: ${rddData.categorie}`, - `Encombrement: ${rddData.encombrement}`, + `Rareté: ${tplData.rarete}`, + `Catégorie: ${tplData.categorie}`, + `Encombrement: ${tplData.encombrement}`, ] return properties; } /* -------------------------------------------- */ _queueChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Refoulement: ${rddData.refoulement}` + `Refoulement: ${tplData.refoulement}` ] return properties; } /* -------------------------------------------- */ _ombreChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Refoulement: ${rddData.refoulement}` + `Refoulement: ${tplData.refoulement}` ] return properties; } /* -------------------------------------------- */ _souffleChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = []; return properties; } /* -------------------------------------------- */ _teteChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = []; return properties; } /* -------------------------------------------- */ _tarotChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Concept: ${rddData.concept}`, - `Aspect: ${rddData.aspect}`, + `Concept: ${tplData.concept}`, + `Aspect: ${tplData.aspect}`, ] return properties; } /* -------------------------------------------- */ _nombreastralChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Valeur: ${rddData.value}`, - `Jour: ${rddData.jourlabel}`, + `Valeur: ${tplData.value}`, + `Jour: ${tplData.jourlabel}`, ] return properties; } /* -------------------------------------------- */ _monnaieChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Valeur en Deniers: ${rddData.valeur_deniers}`, - `Encombrement: ${rddData.encombrement}` + `Valeur en Deniers: ${tplData.valeur_deniers}`, + `Encombrement: ${tplData.encombrement}` ] return properties; } /* -------------------------------------------- */ _meditationChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Thème: ${rddData.theme}`, - `Compétence: ${rddData.competence}`, - `Support: ${rddData.support}`, - `Heure: ${rddData.heure}`, - `Purification: ${rddData.purification}`, - `Vêture: ${rddData.veture}`, - `Comportement: ${rddData.comportement}`, - `Case TMR: ${rddData.tmr}` + `Thème: ${tplData.theme}`, + `Compétence: ${tplData.competence}`, + `Support: ${tplData.support}`, + `Heure: ${tplData.heure}`, + `Purification: ${tplData.purification}`, + `Vêture: ${tplData.veture}`, + `Comportement: ${tplData.comportement}`, + `Case TMR: ${tplData.tmr}` ] return properties; } /* -------------------------------------------- */ _casetmrChatData() { - const rddData = Misc.data(this).data; + const tplData = Misc.templateData(this); let properties = [ - `Coordonnée: ${rddData.coord}`, - `Spécificité: ${rddData.specific}` + `Coordonnée: ${tplData.coord}`, + `Spécificité: ${tplData.specific}` ] return properties; } diff --git a/templates/post-item.html b/templates/post-item.html index d508d769..a569f947 100644 --- a/templates/post-item.html +++ b/templates/post-item.html @@ -3,26 +3,28 @@ {{#if img}} {{/if}} - -
{{{data.description}}}
- - {{#each properties as |property p|}} - {{{property}}}
- {{/each}} -
- {{#if postPrice}} - Prix: {{postPrice}} Sols - {{/if}} - {{#if postQuantity}} + +

{{{data.description}}}

+

+ {{#each properties as |property p|}} + {{{property}}}
+ {{/each}} + {{#if (or postQuantity postPrice)}} + + {{#if postQuantity}} Quantité: {{postQuantity}} - {{/if}} -

- - {{#if finalPrice}} -
- Prix Total: {{finalPrice}} Sols -
- {{/if}} + {{/if}} + {{#if postPrice}} + Prix: {{postPrice}} Sols
+ {{/if}} + + {{/if}} + {{#if finalPrice}} + + Prix Total: {{finalPrice}} Sols
+
+ {{/if}} +

{{#if hasPrice}}