From 7dc1724ab7a97ee8ab716cbc51ad82f2c056956f Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 18:43:32 +0200 Subject: [PATCH 01/10] Auto format --- module/actor.js | 132 ++++++++++++++++++++++++------------------------ module/item.js | 2 + 2 files changed, 69 insertions(+), 65 deletions(-) diff --git a/module/actor.js b/module/actor.js index 9de3911d..915ba800 100644 --- a/module/actor.js +++ b/module/actor.js @@ -310,22 +310,22 @@ export class RdDActor extends Actor { getDemiReve() { return Misc.templateData(this).reve.tmrpos.coord; } - + /* -------------------------------------------- */ async verifierPotionsEnchantees() { - let potionsEnchantees = this.filterItemsData( it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante')); - for ( let potion of potionsEnchantees) { - if ( !potion.prpermanent) { + let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante')); + for (let potion of potionsEnchantees) { + if (!potion.prpermanent) { console.log(potion); let newPr = (potion.data.pr > 0) ? potion.data.pr - 1 : 0; - let update = { _id: potion._id, 'data.pr': newPr}; + let update = { _id: potion._id, 'data.pr': newPr }; const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity let messageData = { - pr : newPr, - alias : this.name, - potionName : potion.name, - potionImg : potion.img + pr: newPr, + alias: this.name, + potionName: potion.name, + potionImg: potion.img } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), @@ -380,7 +380,7 @@ export class RdDActor extends Actor { await this._recupereChance(); await this.transformerStress(); await this.retourSeuilDeReve(message); - this.bonusRecuperationPotion= 0; // Reset potion + this.bonusRecuperationPotion = 0; // Reset potion await this.retourSust(message); await this.verifierPotionsEnchantees(); message.content = `A la fin Chateau Dormant, ${message.content}
Un nouveau jour se lève`; @@ -404,7 +404,7 @@ export class RdDActor extends Actor { let definition = definitions.find(d => d.type == type); for (let blessure of liste) { if (blessure.jours >= definition.facteur) { - let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets)+this.bonusRecuperationPotion, message); + let rolled = await this._jetRecuperationConstitution(Misc.toInt(blessure.soins_complets) + this.bonusRecuperationPotion, message); blessure.soins_complets = 0; if (rolled.isSuccess && this._retrograderBlessure(type, blessure, moindres)) { message.content += ` -- une blessure ${type} cicatrise`; @@ -2320,7 +2320,7 @@ export class RdDActor extends Actor { "cout": artData.exotismeFinal < 0 ? 0 : artData.qualiteFinale * 0.01 } }; - if (artData.ajouterEquipement){ + if (artData.ajouterEquipement) { await this.createEmbeddedDocuments('Item', [platCuisine]); ui.notifications.info(`${platCuisine.data.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`); } @@ -3187,7 +3187,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async buildPotionGuerisonList( pointsGuerison) { + async buildPotionGuerisonList(pointsGuerison) { let pointsGuerisonInitial = pointsGuerison; let myData = Misc.templateData(this); const blessures = duplicate(myData.blessures); @@ -3195,70 +3195,70 @@ export class RdDActor extends Actor { console.log(blessures); for (let critique of blessures.critiques.liste) { - if (critique.active && pointsGuerison >= 6 ) { + if (critique.active && pointsGuerison >= 6) { pointsGuerison -= 6; critique.active = false; - guerisonData.list.push( "1 Blessure Critique (6 points)"); + guerisonData.list.push("1 Blessure Critique (6 points)"); } } for (let grave of blessures.graves.liste) { - if (grave.active && pointsGuerison >= 4 ) { + if (grave.active && pointsGuerison >= 4) { pointsGuerison -= 4; grave.active = false; - guerisonData.list.push( "1 Blessure Grave (4 points)"); + guerisonData.list.push("1 Blessure Grave (4 points)"); } } for (let legere of blessures.legeres.liste) { - if (legere.active && pointsGuerison >= 2 ) { + if (legere.active && pointsGuerison >= 2) { pointsGuerison -= 2; legere.active = false; - guerisonData.list.push( "1 Blessure Légère (2 points)"); + guerisonData.list.push("1 Blessure Légère (2 points)"); } } await this.update({ "data.blessures": blessures }); let pvManquants = myData.sante.vie.max - myData.sante.vie.value; - let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2 )); - pointsGuerison -= pvSoignees*2; - guerisonData.list.push( pvSoignees + " Points de Vie soignés"); + let pvSoignees = Math.min(pvManquants, Math.floor(pointsGuerison / 2)); + pointsGuerison -= pvSoignees * 2; + guerisonData.list.push(pvSoignees + " Points de Vie soignés"); await this.santeIncDec('vie', +pvSoignees, false); guerisonData.pointsConsommes = pointsGuerisonInitial - pointsGuerison; return guerisonData; - } + } /* -------------------------------------------- */ async consommerPotionSoin(potionData) { potionData.alias = this.name; if (potionData.data.categorie.includes('Enchante')) { - potionData.pointsGuerison = RdDHerbes.calculePointsGuerison( potionData.data); + potionData.pointsGuerison = RdDHerbes.calculePointsGuerison(potionData.data); potionData.enchanteTexte = "enchantée"; potionData.isEnchante = true; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData ) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData) }); // Gestion de la résistance: - let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 ); + let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); potionData.reussiteReve = false; if (!rolled.isSuccess) { await this.reveActuelIncDec(-1); potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison); - potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; + potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; potionData.reussiteReve = true; } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData ) - }); + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData) + }); } else { potionData.enchanteTexte = ""; potionData.isEnchante = false; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData ) - }); + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData) + }); this.bonusRecuperationPotion = potionData.data.herbeBonus; } } @@ -3268,27 +3268,27 @@ export class RdDActor extends Actor { potionData.alias = this.name; if (potionData.data.categorie.includes('Enchante')) { - potionData.casesRepos = RdDHerbes.calculePointsRepos( potionData.data); + potionData.casesRepos = RdDHerbes.calculePointsRepos(potionData.data); potionData.enchanteTexte = "enchantée"; potionData.isEnchante = true; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData ) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData) }); // Gestion de la résistance: - let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8 ); + let rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); potionData.reussiteReve = false; if (!rolled.isSuccess) { await this.reveActuelIncDec(-1); let fatigueActuelle = this.getFatigueActuelle(); potionData.caseFatigueReel = (fatigueActuelle >= potionData.casesRepos) ? potionData.casesRepos : fatigueActuelle; potionData.guerisonDureeUnite = (potionData.data.reposalchimique) ? "rounds" : "minutes"; - potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel*5; + potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel * 5; potionData.reussiteReve = true; potionData.aphasiePermanente = false; - if ( potionData.data.reposalchimique ) { - let chanceAphasie = new Roll("1d100").evaluate({async : false} ).total; - if ( chanceAphasie <= potionData.data.pr ) { + if (potionData.data.reposalchimique) { + let chanceAphasie = new Roll("1d100").evaluate({ async: false }).total; + if (chanceAphasie <= potionData.data.pr) { potionData.aphasiePermanente = true; } } @@ -3296,62 +3296,64 @@ export class RdDActor extends Actor { } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData ) - }); + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData) + }); } else { potionData.enchanteTexte = ""; potionData.isEnchante = false; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData ) - }); + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData) + }); this.bonusRepos = potionData.data.herbeBonus; } } /* -------------------------------------------- */ - dialogFabriquerPotion( herbe ) { + dialogFabriquerPotion(herbe) { DialogFabriquerPotion.create(this, herbe, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', }, []); } /* -------------------------------------------- */ - async fabriquerPotion( potionData ) { + async fabriquerPotion(potionData) { let newPotion = { name: `Potion de ${potionData.data.categorie} (${potionData.name})`, type: 'potion', img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp", - data: { quantite: 1, valeur_deniers: 1, encombrement: 0.01, + data: { + quantite: 1, valeur_deniers: 1, encombrement: 0.01, categorie: potionData.data.categorie, - herbe: potionData.name, + herbe: potionData.name, rarete: potionData.data.rarete, herbebrins: potionData.nbBrins, - description: "" } + description: "" + } } - await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true }); + await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true }); let newQuantite = potionData.data.quantite - potionData.nbBrins; let messageData = { alias: this.name, - categorie: potionData.data.categorie, - herbe: potionData.name, - nbBrinsPotion: potionData.nbBrins, + categorie: potionData.data.categorie, + herbe: potionData.name, + nbBrinsPotion: potionData.nbBrins, nbBrinsReste: newQuantite } - if (newQuantite == 0 ) { - await this.deleteEmbeddedDocuments('Item', [ potionData._id ] ); + if (newQuantite == 0) { + await this.deleteEmbeddedDocuments('Item', [potionData._id]); } else { - let update = { _id: potionData._id, 'data.quantite': newQuantite}; + let update = { _id: potionData._id, 'data.quantite': newQuantite }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData ) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData) }); - } + } /* -------------------------------------------- */ - async consommerPotionGenerique( potionData ) { + async consommerPotionGenerique(potionData) { potionData.alias = this.name; if (potionData.data.categorie.includes('Enchante')) { @@ -3363,22 +3365,22 @@ export class RdDActor extends Actor { } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData ) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData) }); -} + } /* -------------------------------------------- */ - async consommerPotion( potion ) { + async consommerPotion(potion) { const potionData = Misc.data(potion); - if ( potionData.data.categorie.includes('Soin')) { - this.consommerPotionSoin( potionData); - } else if( potionData.data.categorie.includes('Repos')) { + if (potionData.data.categorie.includes('Soin')) { + this.consommerPotionSoin(potionData); + } else if (potionData.data.categorie.includes('Repos')) { this.consommerPotionRepos(potionData); } else { - this.consommerPotionGenerique(potionData); + this.consommerPotionGenerique(potionData); } - await this.deleteEmbeddedDocuments('Item', [ potion.id ] ); + await this.deleteEmbeddedDocuments('Item', [potion.id]); } /* -------------------------------------------- */ diff --git a/module/item.js b/module/item.js index 5c94099f..7a3c52c9 100644 --- a/module/item.js +++ b/module/item.js @@ -9,9 +9,11 @@ export class RdDItem extends Item { static getTypeObjetsEquipement() { return typesObjetsEquipement; } + static getTypesOeuvres() { return typesObjetsOeuvres; } + prepareDerivedData() { super.prepareDerivedData(); const itemData = this.data; From 6b31e81c72c4ee0e4e13a022ad7eb554d3c56532 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 18:47:00 +0200 Subject: [PATCH 02/10] =?UTF-8?q?Possibilit=C3=A9=20de=20poster=20de=20la?= =?UTF-8?q?=20nourriture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + utilisation de l'Item de l'actor plutôt qu'une copie + extraction fonction pour diminuer la quantité d'un item --- module/item-sheet.js | 2 +- module/item.js | 260 ++++++++++++++++++++++----------------- templates/post-item.html | 40 +++--- 3 files changed, 167 insertions(+), 135 deletions(-) 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}} From 3d8453dc2da016a5b6d25ea1ee0939a0f9b4c7ec Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 23:01:10 +0200 Subject: [PATCH 03/10] Consommer nourriture, suite #168 --- module/actor-sheet.js | 2 +- module/actor.js | 87 +++++++--- module/dialog-consommer.js | 153 +++++++----------- module/item.js | 25 +++ module/misc.js | 6 +- .../consommer/dialog-nourritureboisson.html | 36 +++++ templates/dialog-consommer-nourriture.html | 39 ----- 7 files changed, 189 insertions(+), 159 deletions(-) create mode 100644 templates/consommer/dialog-nourritureboisson.html delete mode 100644 templates/dialog-consommer-nourriture.html diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 2cf90ea1..576f4c9f 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -261,7 +261,7 @@ export class RdDActorSheet extends ActorSheet { const li = $(ev.currentTarget).parents(".item"); const itemId = li.data("item-id"); const item = this.actor.getObjet(itemId); - this.actor.consommer(item); + this.actor.consommerDialog(item); }); html.find('.subacteur-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); diff --git a/module/actor.js b/module/actor.js index 915ba800..a3efca07 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1610,25 +1610,70 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async consommer(item) { - DialogConsommer.create(this, item, { - html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-consommer-nourriture.html', - }, []); + async consommerDialog(item) { + if (!item.isConsommable()) return; + const dialog = await DialogConsommer.create(this, item); + dialog.render(true) } - async manger(sust) { + /* -------------------------------------------- */ + async consommer(item, choix) { + switch (Misc.data(item).type) { + case 'nourritureboisson': + return await this.consommerNourritureboisson(item, choix); + case 'potion': + return await this.consommerPotion(item) + } + } + + /* -------------------------------------------- */ + async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false }) { + const itemData = Misc.data(item); + if (itemData.type != 'nourritureboisson') { + return; + } + if (choix.doses > itemData.data.quantite) { + ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} poour manger ${choix.doses}`) + return; + } + const surmonteExotisme = await this.surmonterExotisme(item, choix); + if (!surmonteExotisme) { + ui.notifications.warn(`Vous n'arrivez pas à manger de ${itemData.name}`) + return; + } + await this.manger(item, choix.doses, { diminuerQuantite: false }); + await this.boire(item, choix.doses, { diminuerQuantite: false }); + await item.diminuerQuantite(choix.doses); + } + + /* -------------------------------------------- */ + async manger(item, doses, options = { diminuerQuantite: true }) { + if (!item.isConsommable()) return; + await this.apprecierCuisine(item); + const sust = Misc.templateData(item).sust; if (sust > 0) { - await this.updateCompteurValue('sust', Misc.templateData(this).compteurs.sust.value + sust); + await this.updateCompteurValue('sust', Misc.keepDecimals(Misc.templateData(this).compteurs.sust.value + sust * doses, 2)); } + await item.diminuerQuantite(doses, options); } - async boire(eau) { - if (eau > 0) { - await this.actor.updateCompteurValue('eau', Misc.templateData(this).eau.value + this.consommerData.data.desaltere); + /* -------------------------------------------- */ + async boire(item, doses, options = { diminuerQuantite: true }) { + if (!item.isConsommable()) return; + const tplData = Misc.templateData(item); + const desaltere = tplData.desaltere; + if (desaltere > 0) { + await this.updateCompteurValue('eau', Misc.keepDecimals(Misc.templateData(this).compteurs.eau.value + desaltere * doses, 2)); } + if (item.isAlcool()) { + for (let i = 0; i < doses; i++) { + await this.saouler(tplData.force); + } + } + await item.diminuerQuantite(doses, options); } - async alcool(forceAlcool) { + async saouler(forceAlcool) { const actorTplData = Misc.templateData(this); const etatGeneral = this.getEtatGeneral({ ethylisme: true }); const nbDoses = -Number(actorTplData.compteurs.ethylisme.nb_doses || 0); @@ -1643,26 +1688,28 @@ export class RdDActor extends Actor { await this.performEthylisme(rollData); } - async apprecierCuisine(consommerData) { + async apprecierCuisine(item) { const cuisine = Misc.data(this.getCompetence('cuisine')); - const qualite = consommerData.data.qualite; + const itemData = Misc.data(item); + const qualite = itemData.data.qualite; if (cuisine && qualite > 0 && qualite > cuisine.data.niveau) { - const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: consommerData.data.boisson ? "apprécie la boisson" : "apprécie le plat" }); + const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: itemData.data.boisson ? "apprécie la boisson" : "apprécie le plat" }); if (rolled.isSuccess) { await this.jetDeMoral('heureux'); } } } - - async surmonterExotisme(consommerData) { - const qualite = consommerData.data.qualite; + + async surmonterExotisme(item, choix = {}) { + const itemData = Misc.data(item); + const qualite = itemData.data.qualite; if (qualite < 0) { - const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: "tente de surmonter l'exotisme" }); + const rolled = await this.rollCaracCompetence('volonte', 'cuisine', qualite, { title: `surmonte l'exotisme de ${itemData.name}` }); if (rolled.isEchec) { - if (!consommerData.data.seForcer) { + if (!choix.seForcer) { return false; } - await this.actor.jetDeMoral('malheureux'); + await this.jetDeMoral('malheureux'); } } return true; @@ -2102,7 +2149,7 @@ export class RdDActor extends Actor { caracValue: Number(carac.value), selectedCarac: carac, competence: competence, - finalLevel: (competence?.data.niveau ?? 0) + diff, + finalLevel: (Misc.templateData(competence)?.niveau ?? 0) + diff, diffLibre: diff, showDice: true, show: { title: options?.title ?? '' } diff --git a/module/dialog-consommer.js b/module/dialog-consommer.js index 13ea1387..37584bd5 100644 --- a/module/dialog-consommer.js +++ b/module/dialog-consommer.js @@ -3,56 +3,24 @@ import { Misc } from "./misc.js"; export class DialogConsommer extends Dialog { - static async create(actor, item, dialogConfig) { - let consommerData = DialogConsommer.prepareData(actor, item); - if (!consommerData) { - ui.notifications.warn(`Impossible de consommer un ${consommerData.name}, ce n'est pas de la nourriture, une boisson ou une potion`); - return; - } + static async create(actor, item, template = undefined, options = {}) { + const consommerData = DialogConsommer.prepareData(actor, item, options); + const html = await renderTemplate(template ?? `systems/foundryvtt-reve-de-dragon/templates/consommer/dialog-${Misc.data(item).type}.html`, consommerData); + return new DialogConsommer(actor, item, consommerData, html, options) + } + + constructor(actor, item, consommerData, html, options = {}) { + mergeObject(options, { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }, { overwrite: false }) let conf = { title: consommerData.title, - content: await renderTemplate(dialogConfig.html, consommerData), + content: html, default: consommerData.buttonName, - }; - - - let options = { classes: ["dialogconsommer"], width: 600, height: 500, 'z-index': 99999 }; - mergeObject(options, dialogConfig.options ?? {}, { overwrite: true }) - - console.log('consommer', actor, consommerData, conf, options); - const dialog = new DialogConsommer(actor, consommerData, conf, options); - dialog.render(true); - return dialog; - } - - static prepareData(actor, item) { - let consommerData = duplicate(Misc.data(item)); - switch (consommerData.type) { - default: - return undefined; - case 'nourritureboisson': - consommerData.doses = 1; - consommerData.title = consommerData.data.boisson ? `${consommerData.name}: boire une dose` : `${consommerData.name}: manger une portion`; - consommerData.buttonName = consommerData.data.boisson ? "Boire" : "Manger"; - break; - case 'potion': - buttonName.title = `${consommerData.name}: boire la potion`; - consommerData.buttonName = "Boire"; - consommerData.alchimie = Misc.data(actor.getCompetence('alchimie')); - break; - } - consommerData.cuisine = Misc.data(actor.getCompetence('cuisine')); - consommerData.seForcer = false; - return consommerData; - } - - - constructor(actor, consommerData, conf, options) { - conf.buttons = { - [consommerData.buttonName]: { - label: consommerData.buttonName, callback: it => { - this.consommer(); + buttons: { + [consommerData.buttonName]: { + label: consommerData.buttonName, callback: it => { + this.actor.consommer(this.item, this.consommerData.choix); + } } } }; @@ -60,66 +28,55 @@ export class DialogConsommer extends Dialog { super(conf, options); this.actor = actor; + this.item = item; this.consommerData = consommerData; } + /* -------------------------------------------- */ + static prepareData(actor, item, options) { + const itemData = duplicate(Misc.data(item)); + let consommerData = { + item: itemData, + choix: { + doses: options.doses ?? 1, + seForcer: options.seForcer ?? false, + } + } + switch (itemData.type) { + case 'nourritureboisson': + consommerData.title = itemData.data.boisson ? `${itemData.name}: boire une dose` : `${itemData.name}: manger une portion`; + consommerData.buttonName = itemData.data.boisson ? "Boire" : "Manger"; + break; + case 'potion': + buttonName.title = `${itemData.name}: boire la potion`; + consommerData.buttonName = "Boire"; + break; + } + DialogConsommer.calculDoses(consommerData, consommerData.choix.doses) + return consommerData; + } + + static calculDoses(consommerData) { + const doses = consommerData.choix.doses; + consommerData.totalSust = Misc.keepDecimals(doses * (consommerData.item.data.sust ?? 0), 2); + consommerData.totalDesaltere = consommerData.item.data.boisson + ? Misc.keepDecimals(doses * (consommerData.item.data.desaltere ?? 0), 2) + : 0; + } + + /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); - - function updateConsommerData(rollData) { - - rollData.finalLevel = Number(rollData.etat) + Number(rollData.forceAlcool) + rollData.diffNbDoses; - - // Mise à jour valeurs - $("#roll-param").text(rollData.vieValue + " / " + Misc.toSignedString(rollData.finalLevel)); - $(".table-resolution").remove(); - $("#resolutionTable").append(RdDResolutionTable.buildHTMLTableExtract(rollData.vieValue, rollData.finalLevel)); - } - + html.find(".se-forcer").change(event => { + this.consommerData.choix.seForcer = event.currentTarget.checked; + }); html.find(".consommer-doses").change(event => { - this.u + this.consommerData.choix.doses = Number(event.currentTarget.value); + DialogConsommer.calculDoses(this.consommerData); + $(".total-sust").text(this.consommerData.totalSust) + $(".total-desaltere").text(this.consommerData.totalDesaltere) }); } - /* -------------------------------------------- */ - async consommer() { - switch (this.consommerData.type) { - default: - return undefined; - case 'nourritureboisson': - return await this.consommerNourritureBoisson(); - case 'potion': - return await this.consommerPotion(); - } - } - - async consommerNourritureBoisson() { - const surmonteExotisme = await this.actor.surmonterExotisme(this.consommerData); - if (!surmonteExotisme) { - return; - } - await this.actor.apprecierCuisine(this.consommerData); - if (this.isAlcool()) { - await this.actor.alcool(this.consommerData.data.force); - } - await this.actor.manger(this.consommerData.data.sust); - await this.actor.boire(this.consommerData.data.desaltere); - } - - isAlcool() { - return this.consommerData.data.boisson && this.consommerData.data.alcoolise; - } - - async apprecierCuisine(qualite) { - const jetGoutCuisine = await this.jetGoutCuisine(); - if (jetGoutCuisine) { - await this.actor.jetDeMoral('heureux'); - } - } - - async consommerPotion() { - } - - } \ No newline at end of file diff --git a/module/item.js b/module/item.js index ab7f8ec3..190483c8 100644 --- a/module/item.js +++ b/module/item.js @@ -33,6 +33,31 @@ export class RdDItem extends Item { } + isConsommable(options = { warnIfNot: true }) { + const itemData = Misc.data(this); + if ((itemData.data.quantite ?? 0) <= 0) { + if (options.warnIfNot) { + ui.notifications.warn(`Vous n'avez plus de ${itemData.name}.`); + } + return false; + } + + switch (itemData.type) { + case 'nourritureboisson': + case 'potion': + return true; + } + if (options.warnIfNot) { + ui.notifications.warn(`Impossible de consommer un ${itemData.name}, ce n'est pas commestible.`); + } + return false; + } + + isAlcool() { + const itemData = Misc.data(this); + return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise; + } + async diminuerQuantite(nombre, options = { diminuerQuantite: true }) { if (!options.diminuerQuantite) return; const itemData = Misc.data(this); diff --git a/module/misc.js b/module/misc.js index 0661b44b..e0a07c61 100644 --- a/module/misc.js +++ b/module/misc.js @@ -47,7 +47,11 @@ export class Misc { const parsed = parseInt(value); return isNaN(parsed) ? 0 : parsed; } - + static keepDecimals(num, decimals) { + if (decimals<=0 || decimals>6) return num; + const decimal = Math.pow(10, parseInt(decimals)); + return Math.round(num * decimal) / decimal; + } static getFractionHtml(diviseur) { if (!diviseur || diviseur <= 1) return undefined; switch (diviseur || 1) { diff --git a/templates/consommer/dialog-nourritureboisson.html b/templates/consommer/dialog-nourritureboisson.html new file mode 100644 index 00000000..91a4f15f --- /dev/null +++ b/templates/consommer/dialog-nourritureboisson.html @@ -0,0 +1,36 @@ +
+
+ + +
+ {{#if item.data.sust}} +

Cette {{#if item.data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera {{totalSust}} de sustantation.

+ {{/if}} + {{#if item.data.boisson}} +

{{#if item.data.alcoolise}} + C'est une boisson alcoolisée de force {{item.data.force}}, vous effectuerez un jet d'éthylisme. + {{/if}} + Cette boisson vous apportera {{totalDesaltere}} unités d'eau. +

+ {{/if}} + {{#if (gt item.data.qualite cuisine.data.niveau)}} +

La qualité du plat est telle qu'un jet de Goût/Cuisine à {{numberFormat item.data.qualite decimals=0 sign=true}} + vous permettra un jet de moral heureux.

+ {{/if}} + + {{#if (lt item.data.qualite 0)}} +

+ Pour surmonter l'exotisme, vous devez effectuer un jet de Volonté/Cuisine à + {{numberFormat item.data.qualite decimals=0 sign=true}}. +

+

+ + +

+ {{/if}} + +
\ No newline at end of file diff --git a/templates/dialog-consommer-nourriture.html b/templates/dialog-consommer-nourriture.html deleted file mode 100644 index 58d50d98..00000000 --- a/templates/dialog-consommer-nourriture.html +++ /dev/null @@ -1,39 +0,0 @@ -
-
- - -
-
- {{#if data.sust}} -

- Cette {{#if data.boisson}}boisson{{else}}nourriture{{/if}} vous apportera {{data.sust}} de - sustantation. -

- {{/if}} - {{#if data.boisson}} -

{{#if data.alcoolise}} - C'est une boisson alcoolisée de force {{data.force}}, vous effectuerez un jet d'éthylisme. - {{/if}} - Cette boisson vous apportera {{data.desaltere}} unités d'eau. -

- {{/if}} - {{#if (gt data.qualite cuisine.data.niveau)}} -

La qualité du plat est telle qu'un jet de Goût/Cuisine à {{numberFormat data.qualite decimals=0 sign=true}} - vous permettra un jet de moral heureux.

- {{/if}} -
- - {{#if (lt data.qualite 0)}} -
-

- Pour surmonter l'exotisme, vous devez effectuer un jet de Volonté/Cuisine à {{numberFormat data.qualite decimals=0 sign=true}}. -

-

- - -

-
- {{/if}} - -
\ No newline at end of file From df45c4bbbbfd61d040a94339195ca41174a4fdee Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 23:01:35 +0200 Subject: [PATCH 04/10] Simplification inventaire --- templates/actor-inventaire-conteneur.html | 3 +++ templates/actor-sheet.html | 21 ++++----------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html index 628f8bc8..b925a479 100644 --- a/templates/actor-inventaire-conteneur.html +++ b/templates/actor-inventaire-conteneur.html @@ -9,6 +9,9 @@ {{item.data.quantite}} {{numberFormat item.data.encTotal decimals=2}}
+ {{#unless item.estContenu}} + {{#if item.data.equipe}}{{else}}{{/if}} + {{/unless}} {{#if (eq item.type 'nourritureboisson')}} diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 916dd344..6d5b703f 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -754,26 +754,13 @@ {{#each objets as |item id|}} {{#unless item.estContenu}} {{#if (ne item.type 'conteneur')}} -
  • - - {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} - - {{#if item.data.equipe}}{{else}}{{/if}} - - - {{#if (and (eq item.type 'nourritureboisson') item.data.quantite)}} - Consommer - {{/if}} - -
  • + {{> "systems/foundryvtt-reve-de-dragon/templates/actor-inventaire-conteneur.html" item=item }} {{/if}} {{/unless}} - {{/each}} - {{#each conteneurs as |conteneur id|}} + {{/each}} + {{#each conteneurs as |conteneur id|}} {{buildConteneur this}} - {{/each}} + {{/each}}

    Montures

    From a13b9f9c56745cda0e8dd6fe888dcbe309e7a0d9 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 23:01:57 +0200 Subject: [PATCH 05/10] Fix encombrement herbes --- module/item.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/module/item.js b/module/item.js index 190483c8..38b04f82 100644 --- a/module/item.js +++ b/module/item.js @@ -3,6 +3,7 @@ import { RdDUtility } from "./rdd-utility.js"; const typesObjetsEquipement = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "nourritureboisson", "monnaie"]; const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]; +const encBrin = 0.00005; /* -------------------------------------------- */ export class RdDItem extends Item { @@ -24,14 +25,24 @@ export class RdDItem extends Item { _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; + const enc = this.getEnc(); + if (enc != undefined) { + tplData.encTotal = Math.max(enc, 0) * quantite; } if (tplData.cout != undefined) { tplData.prixTotal = Math.max(tplData.cout, 0) * quantite; } } + getEnc() { + const itemData = Misc.data(this); + switch (itemData.type) + { + case 'herbe': + return encBrin; + } + return itemData.data.encombrement + } isConsommable(options = { warnIfNot: true }) { const itemData = Misc.data(this); From b27ff16857803e687c8a70ef77b20bbe1bc3e7e2 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 12:05:06 +0200 Subject: [PATCH 06/10] =?UTF-8?q?Utiliser=20class=20plut=C3=B4t=20que=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor-entite-sheet.js | 2 +- module/actor-sheet.js | 14 +++++++------- templates/actor-creature-sheet.html | 2 +- templates/actor-entite-sheet.html | 2 +- templates/actor-sheet.html | 14 +++++++------- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/module/actor-entite-sheet.js b/module/actor-entite-sheet.js index 7b953e00..93888936 100644 --- a/module/actor-entite-sheet.js +++ b/module/actor-entite-sheet.js @@ -117,7 +117,7 @@ export class RdDActorEntiteSheet extends ActorSheet { this.render(true); }); - html.find('#encaisser-direct').click(ev => { + html.find('.encaisser-direct').click(ev => { this.actor.encaisser(); }); diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 576f4c9f..a8bc4f28 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -268,7 +268,7 @@ export class RdDActorSheet extends ActorSheet { RdDUtility.confirmerSuppressionSubacteur(this, li); }); - html.find('#encaisser-direct').click(ev => { + html.find('.encaisser-direct').click(ev => { this.actor.encaisser(); }); @@ -416,27 +416,27 @@ export class RdDActorSheet extends ActorSheet { } }); // Display TMR, visuualisation - html.find('#visu-tmr').click((event) => { + html.find('.visu-tmr').click((event) => { this.actor.displayTMR("visu"); }); // Display TMR, normal - html.find('#monte-tmr').click((event) => { + html.find('.monte-tmr').click((event) => { this.actor.displayTMR("normal"); }); // Display TMR, fast - html.find('#monte-tmr-rapide').click((event) => { + html.find('.monte-tmr-rapide').click((event) => { this.actor.displayTMR("rapide"); }); - html.find('#dormir-une-heure').click((event) => { + html.find('.dormir-une-heure').click((event) => { this.actor.dormir(1); }); - html.find('#dormir-chateau-dormant').click((event) => { + html.find('.dormir-chateau-dormant').click((event) => { this.actor.dormirChateauDormant(); }); - html.find('#enlever-tous-effets').click((event) => { + html.find('.enlever-tous-effets').click((event) => { this.actor.enleverTousLesEffets(); }); // Display info about queue diff --git a/templates/actor-creature-sheet.html b/templates/actor-creature-sheet.html index 24409eb9..8e57417c 100644 --- a/templates/actor-creature-sheet.html +++ b/templates/actor-creature-sheet.html @@ -9,7 +9,7 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf
    diff --git a/templates/actor-entite-sheet.html b/templates/actor-entite-sheet.html index 365a0e3d..bd83477c 100644 --- a/templates/actor-entite-sheet.html +++ b/templates/actor-entite-sheet.html @@ -9,7 +9,7 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf
    diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 6d5b703f..70145c11 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -55,14 +55,14 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf - Dormir une heure - Chateau Dormant + Dormir une heure + Chateau Dormant {{#if data.attributs.hautrevant.value}} - Montée dans les Terres Médianes ! - Montée accélérée dans les Terres Médianes ! - Regarder les Terres Médianes + Montée dans les Terres Médianes ! + Montée accélérée dans les Terres Médianes ! + Regarder les Terres Médianes {{/if}}
    @@ -84,7 +84,7 @@ {{/each}} {{#if options.isGM}} - (enlever tout) + (enlever tout) {{/if}} {{else}} Aucun effet actif From 893f2aa835787b77f4585cf6ff9bbc05cc6bd821 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 23:02:53 +0200 Subject: [PATCH 07/10] Minor cleanup ActiveEffect --- module/actor.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/actor.js b/module/actor.js index a3efca07..18ba9bb0 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3502,7 +3502,9 @@ export class RdDActor extends Actor { const ids = Array.from(this.effects?.values()) .filter(it => it.data.flags.core?.statusId == id) .map(it => it.id); - this.deleteEmbeddedDocuments('ActiveEffect', ids); + if (ids.length > 0) { + this.deleteEmbeddedDocuments('ActiveEffect', ids); + } } /* -------------------------------------------- */ @@ -3521,8 +3523,9 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async addStatusEffect(statusEffect) { - const effet = duplicate(statusEffect); + const effet = Misc.data(statusEffect); this.deleteStatusEffectById(effet.id); + effet.flags = effet.flags ?? { core: {} }; effet.flags.core.statusId = effet.id; await this.createEmbeddedDocuments('ActiveEffect', [effet]); } From a39e2a3256cea071d47ceb47b0e1942f3b10e5da Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 11 Apr 2021 23:03:55 +0200 Subject: [PATCH 08/10] Rename herbeData (creer potion d'herbe) --- module/actor.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/module/actor.js b/module/actor.js index 18ba9bb0..22b5f7d9 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3363,33 +3363,34 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async fabriquerPotion(potionData) { + async fabriquerPotion(herbeData) { let newPotion = { - name: `Potion de ${potionData.data.categorie} (${potionData.name})`, type: 'potion', + name: `Potion de ${herbeData.data.categorie} (${herbeData.name})`, type: 'potion', img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp", data: { quantite: 1, valeur_deniers: 1, encombrement: 0.01, - categorie: potionData.data.categorie, - herbe: potionData.name, - rarete: potionData.data.rarete, - herbebrins: potionData.nbBrins, + categorie: herbeData.data.categorie, + herbe: herbeData.name, + rarete: herbeData.data.rarete, + herbebrins: herbeData.nbBrins, description: "" } } await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true }); - let newQuantite = potionData.data.quantite - potionData.nbBrins; + let newQuantite = herbeData.data.quantite - herbeData.nbBrins; let messageData = { alias: this.name, - categorie: potionData.data.categorie, - herbe: potionData.name, - nbBrinsPotion: potionData.nbBrins, + categorie: herbeData.data.categorie, + herbe: herbeData.name, + nbBrinsPotion: herbeData.nbBrins, nbBrinsReste: newQuantite } + // TODO: if (newQuantite == 0) { - await this.deleteEmbeddedDocuments('Item', [potionData._id]); + await this.deleteEmbeddedDocuments('Item', [herbeData._id]); } else { - let update = { _id: potionData._id, 'data.quantite': newQuantite }; + let update = { _id: herbeData._id, 'data.quantite': newQuantite }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } ChatMessage.create({ From b1f0d5483760078f7db727f855b33cd973c0b6b2 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Mon, 12 Apr 2021 00:16:23 +0200 Subject: [PATCH 09/10] Boire une potion de soin --- module/actor-sheet.js | 4 +- module/actor.js | 48 +++++-------------- module/dialog-consommer.js | 2 +- module/item.js | 38 ++++++++++----- module/rdd-herbes.js | 10 ---- templates/actor-inventaire-conteneur.html | 4 +- .../chat-consommer-potion-generique.html | 4 +- templates/chat-consommer-potion-repos.html | 6 +-- templates/chat-consommer-potion-soin.html | 6 +-- templates/consommer/dialog-potion.html | 14 ++++++ templates/item-potion-sheet.html | 4 +- 11 files changed, 67 insertions(+), 73 deletions(-) create mode 100644 templates/consommer/dialog-potion.html diff --git a/module/actor-sheet.js b/module/actor-sheet.js index a8bc4f28..15f9adf5 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -257,11 +257,11 @@ export class RdDActorSheet extends ActorSheet { const li = $(ev.currentTarget).parents(".item"); RdDUtility.confirmerSuppression(this, li); }); - html.find('.item-consommer').click(ev => { + html.find('.item-action').click(ev => { const li = $(ev.currentTarget).parents(".item"); const itemId = li.data("item-id"); const item = this.actor.getObjet(itemId); - this.actor.consommerDialog(item); + this.actor.actionItem(item); }); html.find('.subacteur-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); diff --git a/module/actor.js b/module/actor.js index 22b5f7d9..a1c03135 100644 --- a/module/actor.js +++ b/module/actor.js @@ -27,7 +27,6 @@ import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { Draconique } from "./tmr/draconique.js"; import { RdDCarac } from "./rdd-carac.js"; import { Monnaie } from "./item-monnaie.js"; -import { RdDHerbes } from "./rdd-herbes.js"; import { DialogConsommer } from "./dialog-consommer.js"; import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js"; @@ -313,7 +312,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async verifierPotionsEnchantees() { - let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.categorie.toLowerCase().includes('enchante')); + let potionsEnchantees = this.filterItemsData(it => it.type == 'potion' && it.data.isEnchante); for (let potion of potionsEnchantees) { if (!potion.prpermanent) { console.log(potion); @@ -743,7 +742,6 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async updateCreatureCompetence(compName, fieldName, compValue) { let comp = this.getCompetence(compName); - //console.log(comp); if (comp) { const update = { _id: comp.id } if (fieldName == "niveau") @@ -752,7 +750,6 @@ export class RdDActor extends Actor { update['data.dommages'] = compValue; else update['data.carac_value'] = compValue; - //console.log(update); const updated = await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } } @@ -1610,8 +1607,8 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async consommerDialog(item) { - if (!item.isConsommable()) return; + async actionItem(item) { + if (!item.getActionPrincipale()) return; const dialog = await DialogConsommer.create(this, item); dialog.render(true) } @@ -1648,7 +1645,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async manger(item, doses, options = { diminuerQuantite: true }) { - if (!item.isConsommable()) return; + if (!item.getActionPrincipale()) return; await this.apprecierCuisine(item); const sust = Misc.templateData(item).sust; if (sust > 0) { @@ -1656,10 +1653,10 @@ export class RdDActor extends Actor { } await item.diminuerQuantite(doses, options); } - + /* -------------------------------------------- */ async boire(item, doses, options = { diminuerQuantite: true }) { - if (!item.isConsommable()) return; + if (!item.getActionPrincipale()) return; const tplData = Misc.templateData(item); const desaltere = tplData.desaltere; if (desaltere > 0) { @@ -3278,10 +3275,7 @@ export class RdDActor extends Actor { async consommerPotionSoin(potionData) { potionData.alias = this.name; - if (potionData.data.categorie.includes('Enchante')) { - potionData.pointsGuerison = RdDHerbes.calculePointsGuerison(potionData.data); - potionData.enchanteTexte = "enchantée"; - potionData.isEnchante = true; + if (potionData.data.isEnchante) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData) @@ -3291,7 +3285,7 @@ export class RdDActor extends Actor { potionData.reussiteReve = false; if (!rolled.isSuccess) { await this.reveActuelIncDec(-1); - potionData.guerisonData = await this.buildPotionGuerisonList(potionData.pointsGuerison); + potionData.guerisonData = await this.buildPotionGuerisonList(potionData.data.puissance); potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; potionData.reussiteReve = true; } @@ -3300,8 +3294,6 @@ export class RdDActor extends Actor { content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData) }); } else { - potionData.enchanteTexte = ""; - potionData.isEnchante = false; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-soin.html`, potionData) @@ -3314,10 +3306,7 @@ export class RdDActor extends Actor { async consommerPotionRepos(potionData) { potionData.alias = this.name; - if (potionData.data.categorie.includes('Enchante')) { - potionData.casesRepos = RdDHerbes.calculePointsRepos(potionData.data); - potionData.enchanteTexte = "enchantée"; - potionData.isEnchante = true; + if (potionData.data.isEnchante) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData) @@ -3328,7 +3317,7 @@ export class RdDActor extends Actor { if (!rolled.isSuccess) { await this.reveActuelIncDec(-1); let fatigueActuelle = this.getFatigueActuelle(); - potionData.caseFatigueReel = (fatigueActuelle >= potionData.casesRepos) ? potionData.casesRepos : fatigueActuelle; + potionData.caseFatigueReel = Math.min(fatigueActuelle, potionData.data.puissance); potionData.guerisonDureeUnite = (potionData.data.reposalchimique) ? "rounds" : "minutes"; potionData.guerisonDureeValue = (potionData.data.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel * 5; potionData.reussiteReve = true; @@ -3346,8 +3335,6 @@ export class RdDActor extends Actor { content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData) }); } else { - potionData.enchanteTexte = ""; - potionData.isEnchante = false; ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-appliquer-potion-repos.html`, potionData) @@ -3386,13 +3373,7 @@ export class RdDActor extends Actor { nbBrinsPotion: herbeData.nbBrins, nbBrinsReste: newQuantite } - // TODO: - if (newQuantite == 0) { - await this.deleteEmbeddedDocuments('Item', [herbeData._id]); - } else { - let update = { _id: herbeData._id, 'data.quantite': newQuantite }; - await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity - } + this.getObjet(herbeData._id).diminuerQuantite(herbeData.nbBrins); ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData) @@ -3404,13 +3385,6 @@ export class RdDActor extends Actor { async consommerPotionGenerique(potionData) { potionData.alias = this.name; - if (potionData.data.categorie.includes('Enchante')) { - potionData.enchanteTexte = "enchantée"; - potionData.isEnchante = true; - } else { - potionData.enchanteTexte = ""; - potionData.isEnchante = false; - } ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData) diff --git a/module/dialog-consommer.js b/module/dialog-consommer.js index 37584bd5..d0bc81c5 100644 --- a/module/dialog-consommer.js +++ b/module/dialog-consommer.js @@ -48,7 +48,7 @@ export class DialogConsommer extends Dialog { consommerData.buttonName = itemData.data.boisson ? "Boire" : "Manger"; break; case 'potion': - buttonName.title = `${itemData.name}: boire la potion`; + consommerData.title = `${itemData.name}: boire la potion`; consommerData.buttonName = "Boire"; break; } diff --git a/module/item.js b/module/item.js index 38b04f82..e41bbabb 100644 --- a/module/item.js +++ b/module/item.js @@ -1,3 +1,4 @@ +import { Grammar } from "./grammar.js"; import { Misc } from "./misc.js"; import { RdDUtility } from "./rdd-utility.js"; @@ -17,9 +18,26 @@ export class RdDItem extends Item { prepareDerivedData() { super.prepareDerivedData(); - if (RdDItem.getTypeObjetsEquipement().includes(Misc.data(this).type)) { + const itemData = Misc.data(this); + if (RdDItem.getTypeObjetsEquipement().includes(itemData.type)) { this._calculsEquipement(); } + if (itemData.type == 'potion') { + this.prepareDataPotion() + } + itemData.data.actionPrincipale = this.getActionPrincipale({ warnIfNot: false }); + + } + + prepareDataPotion() { + const tplData = Misc.templateData(this); + const categorie = Grammar.toLowerCaseNoAccent(tplData.categorie); + tplData.isEnchante = categorie.includes('enchante'); + if (tplData.isEnchante) { + if (categorie.includes('soin') || categorie.includes('repos')) { + tplData.puissance = tplData.herbebonus * tplData.pr; + } + } } _calculsEquipement() { @@ -36,32 +54,30 @@ export class RdDItem extends Item { getEnc() { const itemData = Misc.data(this); - switch (itemData.type) - { + switch (itemData.type) { case 'herbe': return encBrin; } return itemData.data.encombrement } - isConsommable(options = { warnIfNot: true }) { + getActionPrincipale(options = { warnIfNot: true }) { const itemData = Misc.data(this); if ((itemData.data.quantite ?? 0) <= 0) { if (options.warnIfNot) { ui.notifications.warn(`Vous n'avez plus de ${itemData.name}.`); } - return false; + return undefined; } - switch (itemData.type) { - case 'nourritureboisson': - case 'potion': - return true; + case 'nourritureboisson': return itemData.data.boisson ? 'Boire' : 'Manger'; + case 'potion': return 'Boire'; } if (options.warnIfNot) { - ui.notifications.warn(`Impossible de consommer un ${itemData.name}, ce n'est pas commestible.`); + ui.notifications.warn(`Impossible d'utilise un ${itemData.name}, aucune action associée définie.`); } - return false; + + return undefined; } isAlcool() { diff --git a/module/rdd-herbes.js b/module/rdd-herbes.js index cded07e6..e1b31911 100644 --- a/module/rdd-herbes.js +++ b/module/rdd-herbes.js @@ -48,16 +48,6 @@ export class RdDHerbes extends Item { formData.isRepos = true; this.computeHerbeBonus(formData, this.herbesRepos, 7); } - - if (formData.data.categorie.includes('Enchante') ) { - formData.isEnchante = true; - if ( formData.isHerbe) { - formData.pointsGuerison = this.calculePointsGuerison( formData.data ); - } - if ( formData.isRepos) { - formData.caseRepos = formData.data.herbebonus * formData.data.pr; - } - } } /* -------------------------------------------- */ diff --git a/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html index b925a479..da3789c0 100644 --- a/templates/actor-inventaire-conteneur.html +++ b/templates/actor-inventaire-conteneur.html @@ -14,8 +14,8 @@ {{/unless}} - {{#if (eq item.type 'nourritureboisson')}} - Consommer + {{#if item.data.actionPrincipale}} + {{item.data.actionPrincipale}} {{/if}}
    diff --git a/templates/chat-consommer-potion-generique.html b/templates/chat-consommer-potion-generique.html index 23c1946b..8f2b5838 100644 --- a/templates/chat-consommer-potion-generique.html +++ b/templates/chat-consommer-potion-generique.html @@ -1,9 +1,9 @@ potion de repos

    - {{alias}} consomme sa Potion {{enchanteTexte}} de {{name}}. + {{alias}} consomme sa Potion {{#if data.isEnchante}}enchantée{{/if}} de {{name}}.


    - Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if isEnchante}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}. + Les effets de la potions sont à gérer manuellement, en fonction de sa nature{{#if data.isEnchante}} et de son enchantement ({{data.pr}} Points de Rêve){{/if}}.
    La potion a été supprimée de l'équipement.
    diff --git a/templates/chat-consommer-potion-repos.html b/templates/chat-consommer-potion-repos.html index 0d1bf631..a51e11f9 100644 --- a/templates/chat-consommer-potion-repos.html +++ b/templates/chat-consommer-potion-repos.html @@ -1,11 +1,11 @@ potion de repos

    - {{alias}} consomme sa Potion de Repos {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins). + {{alias}} consomme sa Potion de Repos {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).


    - {{#if casesRepos}} - Elle permet de récupérer jusqu'à {{casesRepos}} cases de repos. + {{#if data.isEnchante}} + Elle permet de récupérer jusqu'à {{data.puissance}} cases de repos. {{else}} Une fois consommée vers fin Lyre, elle vous octroie un bonus de {{data.herbebonus}} segments de fatigue récupérés en plus à la fin de Chateau Dormant (à gérer manuellement).
    La potion a également été supprimée de l'équipement. diff --git a/templates/chat-consommer-potion-soin.html b/templates/chat-consommer-potion-soin.html index 459428d3..61a400b6 100644 --- a/templates/chat-consommer-potion-soin.html +++ b/templates/chat-consommer-potion-soin.html @@ -1,11 +1,11 @@ potion de soin

    - {{alias}} consomme sa Potion de Soins {{enchanteTexte}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins). + {{alias}} consomme sa Potion de soins {{#if data.isEnchante}}enchantée{{/if}} de {{name}} ({{data.herbe}}, {{data.herbebrins}} brins).


    - {{#if pointsGuerison}} - Elle permet de guérir {{pointsGuerison}} Points de Guérison. + {{#if data.isEnchante}} + Elle permet de guérir {{data.puissance}} Points de Guérison. {{else}} Lors de votre prochain jet de récupération à Chateau Dormant, vous bénéficierez d'un bonus de {{data.herbebonus}} (appliqué automatiquement).
    La potion a également été supprimée de l'équipement. diff --git a/templates/consommer/dialog-potion.html b/templates/consommer/dialog-potion.html new file mode 100644 index 00000000..ae07e9eb --- /dev/null +++ b/templates/consommer/dialog-potion.html @@ -0,0 +1,14 @@ +
    + {{oeuvre.data.competence}} +
    + +
    +
    + {{#if (eq item.data.categorie 'SoinEnchante')}} +

    C'est une potion enchantée de {{item.data.herbe}} de {{item.data.pr}} points de rêve, + sa puissance de guérison est de {{data.puissance}}

    + {{/if}} + +
    + +
    \ No newline at end of file diff --git a/templates/item-potion-sheet.html b/templates/item-potion-sheet.html index 5f4aa541..628a6064 100644 --- a/templates/item-potion-sheet.html +++ b/templates/item-potion-sheet.html @@ -5,7 +5,7 @@

    {{#if isOwned}} {{/if}}
    @@ -77,7 +77,7 @@
    {{/if}} - {{#if isEnchante}} + {{#if data.isEnchante}}
    From 99c58233ef7c3d817cab7ccfb42ebf6ba65e57c6 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Mon, 12 Apr 2021 01:03:37 +0200 Subject: [PATCH 10/10] Pas de dialogue pour boire une potion --- module/actor.js | 28 ++++++++++++++++++++++---- module/item.js | 19 +++++++++++------ styles/simple.css | 2 +- templates/consommer/dialog-potion.html | 14 ------------- 4 files changed, 38 insertions(+), 25 deletions(-) delete mode 100644 templates/consommer/dialog-potion.html diff --git a/module/actor.js b/module/actor.js index a1c03135..e98339a8 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1609,8 +1609,18 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async actionItem(item) { if (!item.getActionPrincipale()) return; + switch (Misc.data(item).type) { + case 'nourritureboisson': return await this.actionNourritureboisson(item); + case 'potion': return await this.actionPotion(item); + } + } + + async actionNourritureboisson(item) { const dialog = await DialogConsommer.create(this, item); - dialog.render(true) + dialog.render(true); + } + async actionPotion(item) { + return await this.consommerPotion(item) } /* -------------------------------------------- */ @@ -1653,7 +1663,7 @@ export class RdDActor extends Actor { } await item.diminuerQuantite(doses, options); } - + /* -------------------------------------------- */ async boire(item, doses, options = { diminuerQuantite: true }) { if (!item.getActionPrincipale()) return; @@ -3274,6 +3284,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async consommerPotionSoin(potionData) { potionData.alias = this.name; + potionData.supprimer = true; if (potionData.data.isEnchante) { ChatMessage.create({ @@ -3305,6 +3316,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async consommerPotionRepos(potionData) { potionData.alias = this.name; + potionData.supprimer = true; if (potionData.data.isEnchante) { ChatMessage.create({ @@ -3373,7 +3385,8 @@ export class RdDActor extends Actor { nbBrinsPotion: herbeData.nbBrins, nbBrinsReste: newQuantite } - this.getObjet(herbeData._id).diminuerQuantite(herbeData.nbBrins); + this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins); + ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData) @@ -3381,6 +3394,13 @@ export class RdDActor extends Actor { } + async diminuerQuantiteObjet(id, nb, options = { supprimerSiZero: false }) { + const item = this.getObjet(id); + if (item){ + await item.diminuerQuantite(nb, options); + } + } + /* -------------------------------------------- */ async consommerPotionGenerique(potionData) { potionData.alias = this.name; @@ -3402,7 +3422,7 @@ export class RdDActor extends Actor { } else { this.consommerPotionGenerique(potionData); } - await this.deleteEmbeddedDocuments('Item', [potion.id]); + this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potionData.supprimer }); } /* -------------------------------------------- */ diff --git a/module/item.js b/module/item.js index e41bbabb..ffe491a8 100644 --- a/module/item.js +++ b/module/item.js @@ -85,16 +85,23 @@ export class RdDItem extends Item { return itemData.type == 'nourritureboisson' && itemData.data.boisson && itemData.data.alcoolise; } - async diminuerQuantite(nombre, options = { diminuerQuantite: true }) { - if (!options.diminuerQuantite) return; + async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) { + if (options.diminuerQuantite == false) 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 }); + + if (options.supprimerSiZero && reste == 0) { + ui.notifications.notify(`${itemData.name} supprimé de votre équipement`); + await this.delete(); + } + else { + 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 }); + } } } diff --git a/styles/simple.css b/styles/simple.css index 1f8d248d..845bc07e 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -935,7 +935,7 @@ ul, li { background: rgba(220,220,210,0.75); border: 2px solid #545469; } -.chat-message .chat-icon { +.chat-icon { border: 0; padding: 2px 6px 2px 2px; float: left; diff --git a/templates/consommer/dialog-potion.html b/templates/consommer/dialog-potion.html deleted file mode 100644 index ae07e9eb..00000000 --- a/templates/consommer/dialog-potion.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - {{oeuvre.data.competence}} -
    - -
    -
    - {{#if (eq item.data.categorie 'SoinEnchante')}} -

    C'est une potion enchantée de {{item.data.herbe}} de {{item.data.pr}} points de rêve, - sa puissance de guérison est de {{data.puissance}}

    - {{/if}} - -
    - -
    \ No newline at end of file