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