From 674582d6e8fb8b20de2340436f50908ed71324bb Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 6 Apr 2021 23:36:35 +0200 Subject: [PATCH] Fixes sur calculs enc et prix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout de la classe de base RdDItem qui se charge du calcul pour un Item Formatage de la zone d'équipement pour avoir de la place pour le Nom Simplification des calculs de totaux --- module/actor-sheet.js | 5 +- module/actor.js | 36 ++++------ module/item-sheet.js | 2 +- module/{item-rdd.js => item.js} | 82 ++++++++++++++--------- module/rdd-main.js | 2 + styles/simple.css | 4 +- templates/actor-inventaire-conteneur.html | 10 +-- templates/actor-sheet.html | 18 ++--- 8 files changed, 88 insertions(+), 71 deletions(-) rename module/{item-rdd.js => item.js} (84%) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 2659db9d..72674ea8 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -11,6 +11,7 @@ import { RdDBonus } from "./rdd-bonus.js"; import { Misc } from "./misc.js"; import { RdDCombatManager } from "./rdd-combat.js"; import { RdDCarac } from "./rdd-carac.js"; +import { RdDItem } from "./item.js"; /* -------------------------------------------- */ export class RdDActorSheet extends ActorSheet { @@ -183,7 +184,7 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ async selectObjetType() { - let typeObjets = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "monnaie"]; + let typeObjets = RdDItem.getTypeObjetsEquipement(); let options = `Selectionnez le type d'équipement`; for (let typeName of typeOeuvres) { options += `` diff --git a/module/actor.js b/module/actor.js index 3b85a032..93b6e66d 100644 --- a/module/actor.js +++ b/module/actor.js @@ -240,7 +240,7 @@ export class RdDActor extends Actor { return Math.floor(Misc.templateData(this).prixTotalEquipement ?? 0); } getSurenc() { - return Misc.toInt(Misc.templateData(this).compteurs.surenc?.value); + return Misc.templateData(this).compteurs.surenc?.value ?? 0; } /* -------------------------------------------- */ getCompetence(name) { @@ -956,8 +956,9 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ detectSurEncombrement() { - return Math.max(0, Math.ceil(Number(this.data.encTotal) - this.getEncombrementMax())); + return Math.max(0, Math.ceil(Number(this.encTotal) - this.getEncombrementMax())); } + getEncombrementMax() { return (this.data.type == 'vehicule') ? Misc.templateData(this).capacite_encombrement @@ -980,17 +981,11 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeEncombrement() { - Misc.templateData(this).encTotal = this.filterItemsData(it => it.data.encombrement) - .map(it => this._calcEncItem(it)) + const tplData = Misc.templateData(this); + tplData.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) + .map(it => it.data.encTotal) .reduce(Misc.sum(), 0); - return Misc.templateData(this).encTotal; - } - - _calcEncItem(it) { - it.data.encombrement = Number(it.data.encombrement ?? 0); - it.data.quantite = Math.min(1, Number(it.data.quantite ?? 1)); - it.data.encTotal = it.data.encombrement * it.data.quantite; - return it.data.encTotal; + return tplData.encTotal; } /* -------------------------------------------- */ @@ -1007,17 +1002,12 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computePrixTotalEquipement() { - let prixTotalEquipement = 0; - - // prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité. - for (const itemData of this.filterItemsData(it => it?.data.cout)) { - const cout = Math.min(Number(itemData.data.cout ?? 0), 0); - const quantite = Math.min(Number(itemData.data?.quantite ?? 1), 1); - prixTotalEquipement += cout * quantite; - } + const tplData = Misc.templateData(this); + tplData.prixTotalEquipement = this.filterItemsData(it => it.data.prixTotal) + .map(it => it.data.prixTotal ?? 0) + .reduce(Misc.sum(), 0); // Mise à jour valeur totale de l'équipement - Misc.templateData(this).prixTotalEquipement = prixTotalEquipement; - return prixTotalEquipement; + return tplData.prixTotalEquipement; } /* -------------------------------------------- */ @@ -1068,7 +1058,7 @@ export class RdDActor extends Actor { state += Math.min(0, (actorData.data.compteurs.ethylisme?.value ?? 0)); actorData.data.compteurs.etat.value = state; - if (actorData.data.compteurs && actorData.data.compteurs.surenc) { + if (actorData.data.compteurs?.surenc) { actorData.data.compteurs.surenc.value = - this.detectSurEncombrement(); } } diff --git a/module/item-sheet.js b/module/item-sheet.js index 4e49b82c..90b188e6 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -1,6 +1,6 @@ import { RdDItemSort } from "./item-sort.js"; import { RdDUtility } from "./rdd-utility.js"; -import { RdDItem } from "./item-rdd.js"; +import { RdDItem } from "./item.js"; import { RdDAlchimie } from "./rdd-alchimie.js"; import { RdDItemCompetence } from "./item-competence.js"; import { RdDHerbes } from "./rdd-herbes.js"; diff --git a/module/item-rdd.js b/module/item.js similarity index 84% rename from module/item-rdd.js rename to module/item.js index cb86ecaa..5bf3e624 100644 --- a/module/item-rdd.js +++ b/module/item.js @@ -1,9 +1,32 @@ import { Misc } from "./misc.js"; import { RdDUtility } from "./rdd-utility.js"; +const typesObjetsEquipement = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson"]; +const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]; /* -------------------------------------------- */ export class RdDItem extends Item { + static getTypeObjetsEquipement() { + return typesObjetsEquipement; + } + static getTypesOeuvres() { + return typesObjetsOeuvres; + } + prepareDerivedData() { + super.prepareDerivedData(); + const itemData = this.data; + const tplData = itemData.data; + if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) { + const quantite = itemData.type == 'conteneur' ? 1 : (tplData.quantite ?? 0); + if (tplData.encombrement != undefined) { + tplData.encTotal = Math.max(tplData.encombrement, 0) * quantite; + } + if (tplData.cout != undefined) { + tplData.prixTotal = Math.max(tplData.cout, 0) * quantite; + } + } + } + /* -------------------------------------------- */ async postItem() { console.log(this); @@ -17,13 +40,13 @@ export class RdDItem extends Item { chatData.data.cout_deniers = 0; let dialogResult = [-1, -1]; // dialogResult[0] = quantité, dialogResult[1] = prix - if (chatData.hasPrice ) - { + if (chatData.hasPrice) { let sols = chatData.data.cout; chatData.data.cout_deniers = Math.floor(sols * 100); - dialogResult = await new Promise( (resolve, reject) => {new Dialog({ - content : - `

Modifier la quantité?

+ dialogResult = await new Promise((resolve, reject) => { + new Dialog({ + content: + `

Modifier la quantité?

@@ -34,43 +57,40 @@ export class RdDItem extends Item {
`, - title : "Quantité & Prix", - buttons : { - post : { - label : "Soumettre", + title: "Quantité & Prix", + buttons: { + post: { + label: "Soumettre", callback: (dlg) => { - resolve( [ dlg.find('[name="quantity"]').val(), dlg.find('[name="price"]').val() ] ) + resolve([dlg.find('[name="quantity"]').val(), dlg.find('[name="price"]').val()]) } }, } }).render(true) }) - } - - if (dialogResult[0] > 0) - { - if (this.isOwned) - { + } + + if (dialogResult[0] > 0) { + if (this.isOwned) { if (itemData.data.quantite == 0) dialogResult[0] = -1 - else if (itemData.data.quantite < dialogResult[0]) - { + 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}) + ui.notifications.notify(`Impossible de poster plus que ce que vous avez. La quantité à été réduite à ${dialogResult[0]}.`) + this.update({ "data.quantite": 0 }) } else { - ui.notifications.notify(`Quantité réduite par ${dialogResult[0]}.`) - this.update({"data.quantite" : itemData.data.quantite - dialogResult[0]}) + ui.notifications.notify(`Quantité réduite par ${dialogResult[0]}.`) + this.update({ "data.quantite": itemData.data.quantite - dialogResult[0] }) } } } - - if ( chatData.hasPrice ) { + + if (chatData.hasPrice) { if (dialogResult[0] > 0) chatData.postQuantity = Number(dialogResult[0]); if (dialogResult[1] > 0) { - chatData.postPrice = dialogResult[1]; + chatData.postPrice = dialogResult[1]; chatData.data.cout_deniers = Math.floor(dialogResult[1] * 100); // Mise à jour cout en deniers } chatData.finalPrice = Number(chatData.postPrice) * Number(chatData.postQuantity); @@ -81,14 +101,14 @@ export class RdDItem extends Item { // Don't post any image for the item (which would leave a large gap) if the default image is used if (chatData.img.includes("/blank.png")) chatData.img = null; - + // JSON object for easy creation chatData.jsondata = JSON.stringify( - { - compendium : "postedItem", - payload: itemData, - }); - + { + compendium: "postedItem", + payload: itemData, + }); + renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-item.html', chatData).then(html => { let chatOptions = RdDUtility.chatDataSetup(html); ChatMessage.create(chatOptions) diff --git a/module/rdd-main.js b/module/rdd-main.js index 2a2b3f05..0160bd67 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -29,6 +29,7 @@ import { TMRRencontres } from "./tmr-rencontres.js"; import { RdDHotbar } from "./rdd-hotbar-drop.js" import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { RdDHerbes } from "./rdd-herbes.js"; +import { RdDItem } from "./item.js"; /* -------------------------------------------- */ /* Foundry VTT Initialization */ @@ -134,6 +135,7 @@ Hooks.once("init", async function () { /* -------------------------------------------- */ // Define custom Entity classes CONFIG.Actor.documentClass = RdDActor; + CONFIG.Item.documentClass = RdDItem; CONFIG.RDD = { resolutionTable: RdDResolutionTable.resolutionTable, carac_array: RdDUtility.getCaracArray(), diff --git a/styles/simple.css b/styles/simple.css index c76e8e8a..1f8d248d 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -206,7 +206,9 @@ table {border: 1px solid #7a7971;} .flex-shrink { flex: 'flex-shrink' ; } - +.flex-grow { + flex-grow : 3; +} /* Styles limited to foundryvtt-reve-de-dragon sheets */ .foundryvtt-reve-de-dragon .sheet-header { diff --git a/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html index 8de6a09b..628f8bc8 100644 --- a/templates/actor-inventaire-conteneur.html +++ b/templates/actor-inventaire-conteneur.html @@ -2,15 +2,17 @@ {{#if (eq item.type 'conteneur')}} - +{{item.name}} + +{{item.name}} {{else}} - {{item.name}} + {{item.name}} {{/if}} - {{item.data.quantite}} {{numberFormat item.data.encTotal decimals=2}} -
+
+ {{#if (eq item.type 'nourritureboisson')}} + Consommer + {{/if}}
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 844b5890..c60404da 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -748,23 +748,23 @@