From a86a7861115dc5c16b4f0e8ab5a7aa97e8226365 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 7 Mar 2021 01:25:36 +0100 Subject: [PATCH] Nombreux fixes * Utilisation de EmbeddedDocuments * utiliser data seulement dans le chemin d'update * utiliser class au lieu de id dans le html * si possible, update de la valuer au lieu d'un duplicate du noeud --- module/actor-creature-sheet.js | 10 +- module/actor-entite-sheet.js | 10 +- module/actor-sheet.js | 93 ++- module/actor-vehicule-sheet.js | 2 +- module/actor.js | 593 ++++++++---------- module/item-arme.js | 8 +- module/item-competence.js | 9 + module/item-competencecreature.js | 6 +- module/item-monnaie.js | 30 + module/item-sheet.js | 12 +- module/item-sort.js | 4 +- module/misc.js | 17 +- module/rdd-astrologie-joueur.js | 4 +- module/rdd-combat.js | 18 +- module/rdd-hotbar-drop.js | 8 +- module/rdd-roll.js | 2 +- module/rdd-tmr-dialog.js | 4 +- module/rdd-utility.js | 16 +- module/tmr-utility.js | 2 +- module/tmr/conquete.js | 2 +- module/tmr/draconique.js | 14 +- module/tmr/pelerinage.js | 2 +- module/tmr/present-cites.js | 2 +- module/tmr/urgence-draconique.js | 6 +- styles/simple.css | 2 +- templates/actor-creature-sheet.html | 14 +- templates/actor-entite-sheet.html | 2 +- templates/actor-humanoide-sheet.html | 20 +- templates/actor-inventaire-conteneur.html | 6 +- templates/actor-sheet.html | 78 ++- templates/actor-vehicule-sheet.html | 8 +- templates/chat-actor-carac-xp.html | 5 +- templates/chat-actor-competence-xp.html | 5 +- templates/chat-actor-turn-summary.html | 9 +- templates/chat-demande-attaque-etotal.html | 7 +- .../chat-demande-attaque-particuliere.html | 2 +- templates/chat-demande-defense.html | 6 +- templates/chat-info-appel-au-moral.html | 2 +- templates/chat-initiative-premier-round.html | 2 +- templates/chat-rencontre-tmr.html | 2 +- .../chat-resultat-accorder-cauchemar.html | 9 +- templates/chat-resultat-alchimie.html | 6 +- templates/chat-resultat-appelchance.html | 7 +- templates/chat-resultat-attaque.html | 2 +- templates/chat-resultat-chant.html | 6 +- templates/chat-resultat-competence.html | 2 +- templates/chat-resultat-danse.html | 6 +- templates/chat-resultat-encaissement.html | 19 +- templates/chat-resultat-esquive.html | 2 +- templates/chat-resultat-ethylisme.html | 5 +- templates/chat-resultat-general.html | 4 +- templates/chat-resultat-jeu.html | 6 +- templates/chat-resultat-maitrise-tmr.html | 2 +- templates/chat-resultat-meditation.html | 6 +- templates/chat-resultat-musique.html | 6 +- templates/chat-resultat-oeuvre.html | 10 +- templates/chat-resultat-parade.html | 12 +- templates/chat-resultat-recettecuisine.html | 6 +- templates/chat-resultat-reve-de-dragon.html | 2 +- templates/chat-resultat-sort.html | 2 +- templates/chat-resultat-tache.html | 2 +- .../chat-resultat-transformer-stress.html | 5 +- templates/dialog-astrologie-joueur.html | 2 +- templates/item-arme-sheet.html | 2 +- templates/item-casetmr-sheet.html | 2 +- templates/item-competence-sheet.html | 6 +- templates/item-danse-sheet.html | 2 +- templates/item-jeu-sheet.html | 2 +- templates/item-livre-sheet.html | 2 +- templates/item-meditation-sheet.html | 8 +- templates/item-oeuvre-sheet.html | 4 +- templates/item-sort-sheet.html | 4 +- templates/item-tache-sheet.html | 4 +- 73 files changed, 571 insertions(+), 638 deletions(-) create mode 100644 module/item-monnaie.js diff --git a/module/actor-creature-sheet.js b/module/actor-creature-sheet.js index 3b164097..ad0ed582 100644 --- a/module/actor-creature-sheet.js +++ b/module/actor-creature-sheet.js @@ -31,18 +31,16 @@ export class RdDActorCreatureSheet extends RdDActorSheet { let sheetData = super.getData(); console.log("Creature : ", sheetData); - sheetData.itemsByType = Misc.classify(sheetData.items, item => item.type); + sheetData.itemsByType = Misc.classify(sheetData.items); sheetData.calc = { caracTotal: RdDCarac.computeTotal(sheetData.data.data.carac), - blessures: { - resume: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures) - } + resumeBlessures: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures), } // Compute current carac sum - sheetData.data.carac.taille.isTaille = true; // To avoid button link; + sheetData.data.data.carac.taille.isTaille = true; // To avoid button link; - sheetData.data.competencecreature = sheetData.itemsByType["competencecreature"]; + sheetData.data.data.competencecreature = sheetData.itemsByType["competencecreature"]; this.actor.computeEncombrementTotalEtMalusArmure(); RdDUtility.filterItemsPerTypeForSheet(sheetData); diff --git a/module/actor-entite-sheet.js b/module/actor-entite-sheet.js index 7f909e5a..af32b056 100644 --- a/module/actor-entite-sheet.js +++ b/module/actor-entite-sheet.js @@ -46,14 +46,14 @@ export class RdDActorEntiteSheet extends ActorSheet { // Update Inventory Item html.find('.item-edit').click(ev => { const li = $(ev.currentTarget).parents(".item"); - const item = this.actor.getOwnedItem(li.data("itemId")); + const item = this.actor.items.get(li.data("itemId")); item.sheet.render(true); }); // Delete Inventory Item html.find('.item-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); - this.actor.deleteOwnedItem(li.data("itemId")); + this.actor.deleteEmbeddedDocuments('Item', [li.data("itemId")]); li.slideUp(200, () => this.render(false)); }); @@ -83,16 +83,16 @@ export class RdDActorEntiteSheet extends ActorSheet { this.actor.rollCompetence( compName ); }); - html.find('#endurance-plus').click((event) => { + html.find('.endurance-plus').click((event) => { this.actor.santeIncDec("endurance", 1); this.render(true); }); - html.find('#endurance-moins').click((event) => { + html.find('.endurance-moins').click((event) => { this.actor.santeIncDec("endurance", -1); 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 a1963dd7..a7b007c6 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -37,7 +37,7 @@ export class RdDActorSheet extends ActorSheet { let sheetData = await super.getData(); sheetData.options = this.options; - sheetData.itemsByType = Misc.classify(sheetData.items, item => item.type); + sheetData.itemsByType = Misc.classify(sheetData.items); sheetData.options.isGM = game.user.isGM; const carac = sheetData.data.data.carac; @@ -56,7 +56,7 @@ export class RdDActorSheet extends ActorSheet { sheetData.calc = { comptageArchetype: RdDItemCompetence.computeResumeArchetype(competences), competenceXPTotal: RdDItemCompetence.computeTotalXP(competences), - caracTotal: RdDCarac.computeTotal(carac), + caracTotal: RdDCarac.computeTotal(carac, sheetData.data.data.beaute), // Mise à jour de l'encombrement total et du prix de l'équipement encTotal: await sheetData.actor.computeEncombrementTotalEtMalusArmure(), prixTotalEquipement: await sheetData.actor.computePrixTotalEquipement(), @@ -73,7 +73,7 @@ export class RdDActorSheet extends ActorSheet { RdDItemCompetence.setLevelUp(competences); RdDCarac.setLevelUp(carac); - sheetData.armes = sheetData.itemsByType.arme; + sheetData.armes = duplicate(sheetData.itemsByType.arme); RdDItemArme.computeNiveauArmes(sheetData.armes, competences); RdDItemArme.ajoutCorpsACorps(sheetData.armes, competences, carac); sheetData.esquive = RdDItemCompetence.getEsquive(competences); @@ -124,21 +124,21 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ async createEmptyTache() { - await this.actor.createOwnedItem({ name: 'Nouvelle tache', type: 'tache' }, { renderSheet: true }); + await this.actor.createEmbeddedDocuments('Item', [{ name: 'Nouvelle tache', type: 'tache' }], { renderSheet: true }); } /* -------------------------------------------- */ async creerObjet() { let itemType = $("#creer-equipement").val(); - await this.actor.createOwnedItem({ name: 'Nouveau ' + itemType, type: itemType }, { renderSheet: true }); + await this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true }); } /* -------------------------------------------- */ async selectObjetType() { let itemType = ["objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition", "monnaie"]; - let options = 'Selectionnez le type d\'équipement`; for (let typeName of itemType) { - options += '' + options += `` } options += ''; let d = new Dialog({ @@ -158,11 +158,12 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ /** @override */ activateListeners(html) { + super.activateListeners(html); HtmlUtility._showControlWhen($(".gm-only"), game.user.isGM); - html.find('#show-hide-competences').click((event) => { + html.find('.show-hide-competences').click((event) => { this.options.showCompNiveauBase = !this.options.showCompNiveauBase; this.render(true); }); @@ -192,7 +193,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(); }); @@ -248,15 +249,15 @@ export class RdDActorSheet extends ActorSheet { this.actor.rollCarac(caracName.toLowerCase()); }); - html.find('#chance-actuelle').click((event) => { + html.find('.chance-actuelle').click((event) => { this.actor.rollCarac('chance-actuelle'); }); - html.find('#chance-appel').click((event) => { + html.find('.chance-appel').click((event) => { this.actor.rollAppelChance(); }); - html.find('#jet-astrologie').click((event) => { + html.find('.jet-astrologie').click((event) => { this.actor.astrologieNombresAstraux(); }); @@ -337,45 +338,45 @@ 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 html.find('.queuesouffle-label a').click((event) => { let myID = event.currentTarget.attributes['data-item-id'].value; - const item = this.actor.getOwnedItem(myID); + const item = this.actor.items.get(myID); item.sheet.render(true); }); // Info sort html.find('.sort-label a').click((event) => { let myID = event.currentTarget.attributes['data-id'].value; - const item = this.actor.getOwnedItem(myID); + const item = this.actor.items.get(myID); item.sheet.render(true); }); // Info sort html.find('.case-label a').click((event) => { let myID = event.currentTarget.attributes['data-id'].value; - const item = this.actor.getOwnedItem(myID); + const item = this.actor.items.get(myID); item.sheet.render(true); }); @@ -390,12 +391,10 @@ export class RdDActorSheet extends ActorSheet { // On carac change html.find('.carac-value').change((event) => { let caracName = event.currentTarget.name.replace(".value", "").replace("data.carac.", ""); - //console.log("Value changed :", event, caracName); this.actor.updateCarac(caracName, parseInt(event.target.value)); }); html.find('.carac-xp').change((event) => { let caracName = event.currentTarget.name.replace(".xp", "").replace("data.carac.", ""); - //console.log("Value changed :", event, caracName); this.actor.updateCaracXP(caracName, parseInt(event.target.value)); }); // On competence change @@ -426,64 +425,61 @@ export class RdDActorSheet extends ActorSheet { this.options.editCaracComp = !this.options.editCaracComp; this.render(true); }); - html.find('#show-hide-archetype').click((event) => { + html.find('.show-hide-archetype').click((event) => { this.options.montrerArchetype = !this.options.montrerArchetype; this.render(true); }); // On pts de reve change html.find('.pointsreve-value').change((event) => { - let reveValue = event.currentTarget.value; - let reve = duplicate(this.actor.data.data.reve.reve); - reve.value = reveValue; - this.actor.update({ "data.reve.reve": reve }); + this.actor.update({ "data.reve.reve.value": parseInt(event.currentTarget.value) }); }); // On seuil de reve change html.find('.seuil-reve-value').change((event) => { console.log("seuil-reve-value", event.currentTarget) - this.actor.setPointsDeSeuil(event.currentTarget.value); + this.actor.setPointsDeSeuil(parseInt(event.currentTarget.value)); }); - html.find('#attribut-protection-edit').change((event) => { - this.actor.updateProtectionValue(event.currentTarget.attributes.name.value, parseInt(event.target.value)); + html.find('.attribut-protection-edit').change((event) => { + this.actor.updateAttribut(event.currentTarget.attributes.name.value, parseInt(event.target.value)); }); // On stress change html.find('.compteur-edit').change((event) => { let fieldName = event.currentTarget.attributes.name.value; - this.actor.updateCompteurValue(fieldName, parseInt(event.target.value)); + this.actor.updateCompteur(fieldName, parseInt(event.target.value)); }); - html.find('#ethylisme').change((event) => { + html.find('.ethylisme').change((event) => { this.actor.setEthylisme(parseInt(event.target.value)); }); - html.find('#stress-test').click((event) => { + html.find('.stress-test').click((event) => { this.actor.transformerStress(); this.render(true); }); - html.find('#moral-malheureux').click((event) => { + html.find('.moral-malheureux').click((event) => { this.actor.jetDeMoral('malheureuse'); this.render(true); }); - html.find('#moral-neutre').click((event) => { + html.find('.moral-neutre').click((event) => { this.actor.jetDeMoral('neutre'); this.render(true); }); - html.find('#moral-heureux').click((event) => { + html.find('.moral-heureux').click((event) => { this.actor.jetDeMoral('heureuse'); this.render(true); }); - html.find('#ethylisme-test').click((event) => { + html.find('.ethylisme-test').click((event) => { this.actor.ethylismeTest(); this.render(true); }); - html.find('#jet-vie').click((event) => { + html.find('.jet-vie').click((event) => { this.actor.jetVie(); this.render(true); }); - html.find('#jet-endurance').click((event) => { + html.find('.jet-endurance').click((event) => { this.actor.jetEndurance(); this.render(true); }); @@ -499,19 +495,19 @@ export class RdDActorSheet extends ActorSheet { this.render(true); }); - html.find('#vie-plus').click((event) => { + html.find('.vie-plus').click((event) => { this.actor.santeIncDec("vie", 1); this.render(true); }); - html.find('#vie-moins').click((event) => { + html.find('.vie-moins').click((event) => { this.actor.santeIncDec("vie", -1); this.render(true); }); - html.find('#endurance-plus').click((event) => { + html.find('.endurance-plus').click((event) => { this.actor.santeIncDec("endurance", 1); this.render(true); }); - html.find('#endurance-moins').click((event) => { + html.find('.endurance-moins').click((event) => { this.actor.santeIncDec("endurance", -1); this.render(true); }); @@ -519,25 +515,24 @@ export class RdDActorSheet extends ActorSheet { this.actor.setSonne(event.currentTarget.checked); this.render(true); }); - html.find('#ptreve-actuel-plus').click((event) => { + html.find('.ptreve-actuel-plus').click((event) => { this.actor.reveActuelIncDec(1); this.render(true); }); - html.find('#ptreve-actuel-moins').click((event) => { + html.find('.ptreve-actuel-moins').click((event) => { this.actor.reveActuelIncDec(-1); this.render(true); }); - html.find('#fatigue-plus').click((event) => { + html.find('.fatigue-plus').click((event) => { this.actor.santeIncDec("fatigue", 1); this.render(true); }); - html.find('#fatigue-moins').click((event) => { + html.find('.fatigue-moins').click((event) => { this.actor.santeIncDec("fatigue", -1); this.render(true); }); } - /* -------------------------------------------- */ /** @override */ setPosition(options = {}) { diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index 0e6a366a..d5159cfe 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -67,7 +67,7 @@ export class RdDActorVehiculeSheet extends ActorSheet { // Update Inventory Item html.find('.item-edit').click(ev => { const li = $(ev.currentTarget).parents(".item"); - const item = this.actor.getOwnedItem(li.data("itemId")); + const item = this.actor.items.get(li.data("itemId")); item.sheet.render(true); }); // Delete Inventory Item diff --git a/module/actor.js b/module/actor.js index 68e8db57..51218757 100644 --- a/module/actor.js +++ b/module/actor.js @@ -4,6 +4,7 @@ import { RdDRollDialogEthylisme } from "./rdd-roll-ethylisme.js"; import { RdDRoll } from "./rdd-roll.js"; import { RdDTMRDialog } from "./rdd-tmr-dialog.js"; import { Misc } from "./misc.js"; +import { Monnaie } from "./item-monnaie.js"; import { RdDAstrologieJoueur } from "./rdd-astrologie-joueur.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js"; import { RdDDice } from "./rdd-dice.js"; @@ -60,7 +61,7 @@ export class RdDActor extends Actor { if (data instanceof Array) { return super.create(data, options); } - console.log("****************************************************"); + console.log("****************************************************"); // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic if (data.items) { @@ -70,24 +71,15 @@ export class RdDActor extends Actor { } return actor; } + else { + const compendiumCompetences = RdDItemCompetence.compendium(data.type); + data.items = compendiumCompetences ? await RdDUtility.loadCompendium(compendiumCompetences) : []; - let compendiumName; - if (data.type == "personnage") { - compendiumName = "foundryvtt-reve-de-dragon.competences"; - } else if (data.type == "creature") { - compendiumName = "foundryvtt-reve-de-dragon.competences-creatures"; - } else if (data.type == "entite") { - compendiumName = "foundryvtt-reve-de-dragon.competences-entites"; + if (data.type == "personnage") { + data.items = data.items.concat(Monnaie.monnaiesParDefaut()); + } + return super.create(data, options); } - if (compendiumName) { - data.items = await RdDUtility.loadCompendium(compendiumName); - } - // Ajout monnaie - if (data.type == "personnage" && data.items) { - await RdDActor.ajouterMonnaie(data.items); - } - - return super.create(data, options); } /* -------------------------------------------- */ @@ -115,12 +107,12 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - setRollWindowsOpened( flag ) { + setRollWindowsOpened(flag) { this.rollWindowsOpened = flag; } /* -------------------------------------------- */ - isRollWindowsOpened( ) { + isRollWindowsOpened() { return this.rollWindowsOpened; } @@ -149,12 +141,13 @@ export class RdDActor extends Actor { await this.checkMonnaiePresence(actorData.items); } + /* -------------------------------------------- */ async checkMonnaiePresence(items) { // Ajout opportuniste si les pièces n'existent pas. if (!items) return; // Sanity check during import //console.log("NO MONNAIR FOUND!!!!", items); - let piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1 ); + let piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1); let newMonnaie = []; if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Etain (1 denier)", 1, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp")); @@ -172,26 +165,11 @@ export class RdDActor extends Actor { newMonnaie.push(RdDUtility.createMonnaie("Or (10 sols)", 1000, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp")); } if (newMonnaie.length > 0) { - await this.createEmbeddedDocuments("Item", newMonnaie ); + await this.createEmbeddedDocuments("Item", newMonnaie); //await this.createOwnedItem(newMonnaie); } } - /* -------------------------------------------- */ - static async ajouterMonnaie(items) { // Creation auto à la création du personnage - let etain = RdDUtility.createMonnaie("Etain (1 denier)", 1, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp"); - items.push(etain); - - let bronze = RdDUtility.createMonnaie("Bronze (10 deniers)", 10, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp"); - items.push(bronze); - - let argent = RdDUtility.createMonnaie("Argent (1 sol)", 100, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp"); - items.push(argent); - - let or = RdDUtility.createMonnaie("Or (10 sols)", 1000, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp"); - items.push(or); - } - /* -------------------------------------------- */ isCreature() { return this.data.type == 'creature' || this.data.type == 'entite'; @@ -276,7 +254,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ loadCompendiumNames() { - return this.data.items.filter((item) => item.type == 'competence'); + return this.data.items.filter((item) => item.data.type == 'competence'); } /* -------------------------------------------- */ getCompetence(name) { @@ -284,28 +262,28 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ getTache(id) { - return this.data.items.find(item => item.type == 'tache' && item._id == id); + return this.data.items.find(item => item.data.type == 'tache' && item._id == id); } getMeditation(id) { - return this.data.items.find(item => item.type == 'meditation' && item._id == id); + return this.data.items.find(item => item.data.type == 'meditation' && item._id == id); } getChant(id) { - return this.data.items.find(item => item.type == 'chant' && item._id == id); + return this.data.items.find(item => item.data.type == 'chant' && item._id == id); } getDanse(id) { - return this.data.items.find(item => item.type == 'danse' && item._id == id); + return this.data.items.find(item => item.data.type == 'danse' && item._id == id); } getMusique(id) { - return this.data.items.find(item => item.type == 'musique' && item._id == id); + return this.data.items.find(item => item.data.type == 'musique' && item._id == id); } getOeuvre(id, type = 'oeuvre') { - return this.data.items.find(item => item.type == type && item._id == id); + return this.data.items.find(item => item.data.type == type && item._id == id); } getJeu(id) { - return this.data.items.find(item => item.type == 'jeu' && item._id == id); + return this.data.items.find(item => item.data.type == 'jeu' && item._id == id); } getRecetteCuisine(id) { - return this.data.items.find(item => item.type == 'recettecuisine' && item._id == id); + return this.data.items.find(item => item.data.type == 'recettecuisine' && item._id == id); } /* -------------------------------------------- */ getBestDraconic() { @@ -320,15 +298,15 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ async deleteSortReserve(sortReserve) { - let reserve = duplicate(this.data.data.reve.reserve); let tmr = TMRUtility.getTMR(sortReserve.coord); - let index = reserve.list.findIndex(tmr.type == 'fleuve' - ? sort => (TMRUtility.getTMR(sort.coord).type == 'fleuve' && sort.sort.name == sortReserve.sort.name) - : sort => (sort.coord == sortReserve.coord && sort.sort.name == sortReserve.sort.name) + const sortsEnReserve = duplicate(this.data.data.reve.reserve.list); + let index = sortsEnReserve.findIndex(tmr.type == 'fleuve' + ? sort => (TMRUtility.getTMR(sort.coord).type == 'fleuve' && sort.sort.name == sortReserve.sort.name) + : sort => (sort.coord == sortReserve.coord && sort.sort.name == sortReserve.sort.name) ); - if (index >=0 ) { - reserve.list.splice(index,1); - await this.update({ "data.data.reve.reserve": reserve }); + if (index >= 0) { + sortsEnReserve.splice(index, 1); + await this.update({ "data.reve.reserve.list": sortsEnReserve }); } } @@ -358,13 +336,13 @@ export class RdDActor extends Actor { await this._recupererBlessures(message, "legere", blessures.legeres.liste.filter(b => b.active), []); await this._recupererBlessures(message, "grave", blessures.graves.liste.filter(b => b.active), blessures.legeres.liste); await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste); - await this.update({ "data.data.blessures": blessures }); + await this.update({ "data.blessures": blessures }); await this._recupererVie(message); await this.jetDeMoral('neutre'); // On ne récupère un point de chance que si aucun appel à la chance dans la journée let utilisationChance = duplicate(this.getFlag('foundryvtt-reve-de-dragon', 'utilisationChance') ?? false); - if ( !utilisationChance ) { + if (!utilisationChance) { await this.chanceActuelleIncDec(1); } await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); // Nouveau jour, suppression du flag @@ -475,7 +453,7 @@ export class RdDActor extends Actor { this._supprimerBlessure(blessure); } } - await this.update({ "data.data.blessures": blessures }); + await this.update({ "data.blessures": blessures }); } if (this.isPersonnage()) { await this.setEthylisme(1); @@ -484,9 +462,7 @@ export class RdDActor extends Actor { await this.santeIncDec("vie", this.data.data.sante.vie.max - this.data.data.sante.vie.value); await this.santeIncDec("endurance", this.data.data.sante.endurance.max - this.data.data.sante.endurance.value); if (this.data.data.sante.fatigue) { - let fatigue = duplicate(this.data.data.sante.fatigue) - fatigue.value = 0; - await this.update({ "data.data.sante.fatigue": fatigue }); + await this.update({ "data.sante.fatigue.value": 0 }); } } ChatMessage.create(message); @@ -497,7 +473,7 @@ export class RdDActor extends Actor { async dormir(heures = 1) { let message = { whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), - content: `${this.name}: Vous dormez ${heures == 1 ? 'une': heures} heure${heures == 1 ? '': 's'}.` + content: `${this.name}: Vous dormez ${heures == 1 ? 'une' : heures} heure${heures == 1 ? '' : 's'}. ` }; await this.recupereEndurance(message); for (let i = 0; i < heures; i++) { @@ -513,16 +489,17 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async _recupererEthylisme(message) { - let ethylisme = duplicate(this.data.data.compteurs.ethylisme); - ethylisme.nb_doses = 0; - ethylisme.jet_moral = false; - if (ethylisme.value < 1) { - ethylisme.value = Math.min(ethylisme.value + 1, 1); - if (ethylisme.value <= 0) { - message.content += `Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme.value)}). `; + await this.update({ "data.compteurs.ethylisme.nb_doses": 0 }); + await this.update({ "data.compteurs.ethylisme.jet_moral": false }); + + let ethylisme = this.data.data.compteurs.ethylisme.value; + if (ethylisme < 1) { + ethylisme++; + await this.update({ "data.compteurs.ethylisme.value": ethylisme }); + if (ethylisme <= 0) { + message.content += `Vous dégrisez un peu (${RdDUtility.getNomEthylisme(ethylisme)}). `; } } - await this.update({ "data.data.compteurs.ethylisme": ethylisme }); } /* -------------------------------------------- */ @@ -536,16 +513,15 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async recupererFatigue(message) { - let fatigue = duplicate(this.data.data.sante.fatigue) + const fatigueCourante = this.data.data.sante.fatigue.value; const fatigueMin = this._computeFatigueMin(); - if (fatigue.value <= fatigueMin) { + if (fatigueCourante <= fatigueMin) { message.content += "Vous êtes déjà reposé. "; return; } - fatigue.value = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue.value)); - console.log("recupererFatigue", fatigue) - await this.update({ "data.data.sante.fatigue": fatigue }); - if (fatigue.value == 0) { + const fatigueRestante = Math.max(fatigueMin, this._calculRecuperationSegment(fatigueCourante)); + await this.update({ "data.sante.fatigue.value": fatigueRestante }); + if (fatigueRestante == 0) { message.content += "Vous êtes complêtement reposé. "; } } @@ -684,15 +660,14 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async sortMisEnReserve(rollData, sort) { - let reserve = duplicate(this.data.data.reve.reserve); - reserve.list.push({ coord: rollData.tmr.coord, sort: sort, draconic: duplicate(rollData.competence) }); - await this.update({ "data.data.reve.reserve": reserve }); + const reserve = duplicate(this.data.data.reve.reserve.list); + reserve.push({ coord: rollData.tmr.coord, sort: sort, draconic: duplicate(rollData.competence) }); + await this.update({ "data.reve.reserve.list": reserve }); this.currentTMR.updateTokens(); } /* -------------------------------------------- */ async updateCarac(caracName, caracValue) { - let caracpath = "data.carac." + caracName + ".value" if (caracName == "force") { if (Number(caracValue) > this.getTaille() + 4) { ui.notifications.warn("Votre FORCE doit être au maximum de TAILLE+4"); @@ -709,7 +684,7 @@ export class RdDActor extends Actor { this.setPointsDeChance(caracValue); } } - await this.update({ [caracpath]: caracValue }); + await this.update({ [`data.carac.${caracName}.value`]: caracValue }); } /* -------------------------------------------- */ @@ -717,25 +692,25 @@ export class RdDActor extends Actor { if (caracName == 'Taille') { return; } - let caracpath = "data.carac." + caracName + ".xp"; - await this.update({ [caracpath]: caracXP }); + await this.update({ [`data.carac.${caracName}.xp`]: caracXP }); this.checkCaracXP(caracName); } /* -------------------------------------------- */ async updateCreatureCompetence(compName, fieldName, compValue) { let comp = this.getCompetence(compName); - //console.log(comp); if (comp) { - const update = { _id: comp._id } - if (fieldName == "niveau") - update['data.niveau'] = compValue; - else if (fieldName == "dommages") - update['data.dommages'] = compValue; - else - update['data.carac_value'] = compValue; - //console.log(update); - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [ + { _id: comp._id, [RdDActor._getFieldPath(fieldName)]: compValue } + ]); + } + } + + static _getFieldPath(fieldName) { + switch (fieldName) { + case "niveau": return 'data.niveau'; + case "dommages": return 'data.dommages' + default: return 'data.carac_value'; } } @@ -755,8 +730,7 @@ export class RdDActor extends Actor { content: message }); } - const update = [ { _id: comp.id, 'data.niveau': maxNiveau } ]; - await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.niveau': maxNiveau }]); } else { console.log("Competence not found", compName); } @@ -767,8 +741,7 @@ export class RdDActor extends Actor { let comp = this.getCompetence(compName); if (comp) { this.checkCompetenceXP(compName, compValue); - const update = [ { _id: comp.id, 'data.xp': compValue } ]; - await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.xp': compValue }]); } else { console.log("Competence not found", compName); } @@ -779,8 +752,7 @@ export class RdDActor extends Actor { async updateCompetenceXPSort(compName, compValue) { let comp = this.getCompetence(compName); if (comp) { - const update = [ { _id: comp.id, 'data.xp_sort': compValue } ]; - await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.xp_sort': compValue }]); } else { console.log("Competence not found", compName); } @@ -790,26 +762,21 @@ export class RdDActor extends Actor { async updateCompetenceArchetype(compName, compValue) { let comp = this.getCompetence(compName); if (comp) { - const update = [ { _id: comp.id, 'data.niveau_archetype': compValue } ]; - await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.niveau_archetype': compValue }]); } else { console.log("Competence not found", compName); } } /* -------------------------------------------- */ - async updateCompteurValue(fieldName, fieldValue) { - //console.log("Update", fieldName, fieldValue); - let compteurs = duplicate(this.data.data.compteurs); - compteurs[fieldName].value = fieldValue; - await this.update({ "data.data.compteurs": compteurs }); + async updateCompteur(fieldName, fieldValue) { + await this.update({ [`data.compteurs.${fieldName}.value`]: fieldValue }); } + /* -------------------------------------------- */ - async updateProtectionValue(fieldName, fieldValue) { - let attributs = duplicate(this.data.data.attributs); - attributs[fieldName].value = fieldValue; - await this.update({ "data.data.attributs": attributs }); + async updateAttribut(fieldName, fieldValue) { + await this.update({ [`data.attributs.${fieldName}.value`]: fieldValue }); } /* -------------------------------------------- */ @@ -896,7 +863,7 @@ export class RdDActor extends Actor { this.buildSubConteneurObjetList(itemId, list); //console.log("List to delete", list); for (let item of list) { - await this.deleteEmbeddedDocuments("Item", [item.id] ); + await this.deleteEmbeddedDocuments('Item', [item.id]); } } @@ -915,7 +882,7 @@ export class RdDActor extends Actor { contenu.splice(index, 1); index = contenu.indexOf(itemId); } - await this.updateEmbeddedDocuments("Item", data2use); + await this.updateEmbeddedDocuments('Item', data2use); } } @@ -928,7 +895,7 @@ export class RdDActor extends Actor { if (conteneur && conteneur.type == 'conteneur') { let data2use = duplicate(conteneur.data); data2use.data.contenu.push(itemId); - await this.updateEmbeddedDocuments("Item", [data2use]); + await this.updateEmbeddedDocuments('Item', [data2use]); } } @@ -956,7 +923,7 @@ export class RdDActor extends Actor { let itemMap = {}; for (let item of itemsList) { let srcItem = sourceActor.data.items.find(subItem => subItem._id == item.id); - let newItem = await this.createEmbeddedDocuments("Item", [ duplicate(srcItem) ] ); + let newItem = await this.createEmbeddedDocuments('Item', [duplicate(srcItem)]); console.log('New object', newItem, srcItem); itemMap[srcItem._id] = newItem._id; // Pour garder le lien ancien / nouveau } @@ -971,11 +938,11 @@ export class RdDActor extends Actor { console.log('New conteneur filling!', newConteneur, newItemId, item); let contenu = duplicate(newConteneur.data.contenu); contenu.push(newItemId); - await this.updateEmbeddedDocuments( "Item", [{ _id: newConteneurId, 'data.contenu': contenu } ]); + await this.updateEmbeddedDocuments('Item', [{ _id: newConteneurId, 'data.contenu': contenu }]); } } for (let item of itemsList) { - await sourceActor.deleteEmbeddedDocuments("Item", [ item.id] ); + await sourceActor.deleteEmbeddedDocuments('Item', [item.id]); } } @@ -1029,7 +996,7 @@ export class RdDActor extends Actor { // prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité. for (const item of this.data.items) { - if (item.data && item.data.cout != undefined) { + if (item.data.data && item.data.cout != undefined) { if (!Number(item.data.cout)) item.data.cout = 0; // Auto-fix if (item.data.quantite == undefined) item.data.quantite = 1; // Auto-fix if (item.data.cout < 0) item.data.cout = 0; // Auto-fix @@ -1095,25 +1062,21 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async ajouterRefoulement(value = 1) { let ret = "none"; - - let refoulement = duplicate(this.data.data.reve.refoulement); - refoulement.value = refoulement.value + value; - - let total = new Roll("1d20").roll().total; - if (total <= refoulement.value) { - refoulement.value = 0; + let refoulement = this.data.data.reve.refoulement.value + value; + let total = new Roll("1d20").evaluate().total; + if (total <= refoulement) { + refoulement = 0; this.ajouterSouffle({ chat: true }); ret = "souffle"; } - - await this.update({ "data.data.reve.refoulement": refoulement }); + await this.update({ "data.reve.refoulement.value": refoulement }); return ret; } /* -------------------------------------------- */ async ajouterSouffle(options = { chat: false }) { let souffle = await RdDRollTables.getSouffle(); - await this.createOwnedItem(souffle); + await this.createEmbeddedDocuments('Item', [souffle]); if (options.chat) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), @@ -1129,14 +1092,12 @@ export class RdDActor extends Actor { let queue; if (this.data.data.reve.reve.thanatosused) { queue = await RdDRollTables.getOmbre(); - let myReve = duplicate(this.data.data.reve.reve); - myReve.thanatosused = false; - await this.update({ "data.data.reve.reve": myReve } ); + await this.update({ "data.reve.reve.thanatosused": false }); } else { queue = await RdDRollTables.getQueue(); } - await this.createOwnedItem(queue); + await this.createEmbeddedDocuments('Item', [queue]); if (options.chat) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), @@ -1153,7 +1114,7 @@ export class RdDActor extends Actor { whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name) }); const innaccessible = this.buildTMRInnaccessible(); - let tmr = TMRUtility.getTMRAleatoire(tmr => !innaccessible.includes(tmr.coord) ); + let tmr = TMRUtility.getTMRAleatoire(tmr => !innaccessible.includes(tmr.coord)); this.updateCoordTMR(tmr.coord); return tmr; } @@ -1166,64 +1127,43 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ getTMRRencontres() { - return this.data.data.reve.rencontre; + return this.data.data.reve.rencontre.list; } /* -------------------------------------------- */ async deleteTMRRencontreAtPosition() { - let rencontres = duplicate(this.getTMRRencontres()); - let len = rencontres.list.length; - let i = 0; - //console.log("List", rencontres, len); - let newTable = []; - for (i = 0; i < len; i++) { - if (rencontres.list[i].coord != this.getDemiReve()) - newTable.push(rencontres.list[i]); - } - if (newTable.length != len) { - rencontres.list = newTable; - //console.log("Result: ", rencontres); - await this.update({ "data.data.reve.rencontre": rencontres }); + let rencontres = this.getTMRRencontres(); + let newRencontres = rencontres.filter(it => it.coord != this.getDemiReve()); + if (newRencontres.length != rencontres.length) { + await this.update({ "data.reve.rencontre.list": newRencontres }); } } /* -------------------------------------------- */ async addTMRRencontre(currentRencontre) { - let rencontres = duplicate(this.getTMRRencontres()); - let len = rencontres.list.length; - let i = 0; - let already = false; - for (i = 0; i < len; i++) { - if (rencontres.list[i].coord == this.getDemiReve()) - already = true; - } - if (!already) { - rencontres.list.push(currentRencontre); - await this.update({ "data.data.reve.rencontre": rencontres }); + let rencontres = this.getTMRRencontres(); + let newRencontres = rencontres.filter(it => it.coord == this.getDemiReve()); + if (newRencontres.length == rencontres.length) { + newRencontres.push(currentRencontre); + await this.update({ "data.reve.rencontre.list": newRencontres }); } } /* -------------------------------------------- */ - async deleteTMRRencontre(rencontreKey) { - let list = duplicate(this.data.data.reve.rencontre.list); - let newList = []; - for (let i = 0; i < list.length; i++) { - if ( i != rencontreKey) - newList.push( list[i]); - } - await this.update({ "data.data.reve.rencontre.list": newList }); + async deleteTMRRencontre(index) { + let newRencontres = duplicate(this.getTMRRencontres()); + newRencontres.splice(index, 1); + await this.update({ "data.reve.rencontre.list": newRencontres }); } /* -------------------------------------------- */ async updateCoordTMR(coord) { - await this.update({ "data.data.reve.tmrpos.coord": coord }); + await this.update({ "data.reve.tmrpos.coord": coord }); } /* -------------------------------------------- */ async reveActuelIncDec(value) { - let reve = duplicate(this.data.data.reve.reve); - reve.value = Math.max(reve.value + value, 0); - await this.update({ "data.data.reve.reve": reve }); + await this.update({ "data.reve.reve.value": Math.max(this.data.data.reve.reve.value + value, 0) }); } /* -------------------------------------------- */ @@ -1237,16 +1177,12 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async setPointsDeSeuil(value) { - // let seuil = duplicate(this.data.data.reve.seuil); - // seuil.value = value; - await this.update({ "data.data.reve.seuil.value": value }); + await this.update({ "data.reve.seuil.value": value }); } /* -------------------------------------------- */ async setPointsDeChance(value) { - let chance = duplicate(this.data.data.compteurs.chance); - chance.value = value; - await this.update({ "data.data.compteurs.chance": chance }); + await this.update({ "data.compteurs.chance.value": value }); } /* -------------------------------------------- */ @@ -1258,13 +1194,13 @@ export class RdDActor extends Actor { getSonneRound() { return !this.isEntiteCauchemar() && (this.data.data.sante.sonne?.round ?? false); } - + /* -------------------------------------------- */ - async verifierSonneRound( round ) { - if ( this.getSonne() ) { - if ( round >= this.getSonneRound() + 1) { - await this.setSonne( false, -1 ); // Nettoyer l'état sonné - ChatMessage.create( { content: `${this.name} n'est plus sonné ce round !`} ); + async verifierSonneRound(round) { + if (this.getSonne()) { + if (round >= this.getSonneRound() + 1) { + await this.setSonne(false, -1); // Nettoyer l'état sonné + ChatMessage.create({ content: `${this.name} n'est plus sonné ce round !` }); } } } @@ -1284,10 +1220,8 @@ export class RdDActor extends Actor { if (this.isEntiteCauchemar()) { return; } - let sonneData = duplicate(this.data.data.sante.sonne); - sonneData.value = sonne; - sonneData.round = round; - await this.update({ "data.data.sante.sonne": sonneData }); + await this.update({ "data.sante.sonne.value": sonne }); + await this.update({ "data.sante.sonne.round": round }); } /* -------------------------------------------- */ @@ -1308,12 +1242,10 @@ export class RdDActor extends Actor { sonne: roll.total > endurance || roll.total == 20 // 20 is always a failure } if (roll.total == 1) { - let xp = Misc.toInt(this.data.data.carac.constitution.xp) + 1; - this.update({ "data.data.carac.constitution.xp": xp }); // +1 XP ! - ChatMessage.create( { content: `${this.name} a obenu 1 sur son Jet d'Endurance et a gagné 1 point d'Expérience en Constitution. Ce point d'XP a été ajouté automatiquement).`}); + this.update({ "data.carac.constitution.xp": Misc.toInt(this.data.data.carac.constitution.xp) + 1 }); // +1 XP ! + ChatMessage.create({ content: `${this.name} a obtenu 1 sur son Jet d'Endurance et gagné 1 point d'Expérience en Constitution. Ce point d'XP a été ajouté automatiquement).` }); } if (result.sonne) { - await this.setSonne(); sante.sonne.value = true; } @@ -1340,9 +1272,7 @@ export class RdDActor extends Actor { msgText += `${this.name} a réussi son Jet d'Endurance !`; if (myRoll.total == 1) { msgText += `et gagne 1 Point d'Experience en Constitution`; - let constit = duplicate(this.data.data.carac.constitution) - constit.xp += 1; - await this.update({ "data.data.carac.constitution": constit }); + await this.update({ "data.carac.constitution.xp": (this.data.data.carac.constitution.xp ?? 0) + 1 }); } } else { msgText += `${this.name} a échoué son Jet d'Endurance et devient Sonné`; @@ -1426,7 +1356,7 @@ export class RdDActor extends Actor { if (sante.fatigue && fatigue > 0) { sante.fatigue.value = Math.max(sante.fatigue.value + fatigue, this._computeFatigueMin()); } - await this.update({ "data.data.sante": sante }); + await this.update({ "data.sante": sante }); if (this.isDead()) { await this.addStatusEffectById('dead'); } @@ -1500,22 +1430,16 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async moralIncDec(ajustementMoral) { - let compteurs = duplicate(this.data.data.compteurs); - compteurs.moral.value = Misc.toInt(compteurs.moral.value);; - + ajustementMoral = Math.max(-1, Math.min(1, ajustementMoral)); if (ajustementMoral != 0) { - compteurs.moral.value += ajustementMoral; - if (compteurs.moral.value > 3) { - // exaltation - compteurs.moral.value--; - compteurs.exaltation.value = Misc.toInt(compteurs.exaltation.value) + 1; + const moral = this.data.data.compteurs.moral.value + ajustementMoral; + if (moral > 3) { + await this.update({ 'data.compteurs.exaltation.value': this.data.data.compteurs.exaltation.value + 1 }); } - if (compteurs.moral.value < -3) { - // dissolution - compteurs.moral.value++; - compteurs.dissolution.value = Misc.toInt(compteurs.dissolution.value) + 1; + if (moral < -3) { + await this.update({ 'data.compteurs.dissolution.value': this.data.data.compteurs.dissolution.value + 1 }); } - await this.update({ 'data.compteurs': compteurs }); + await this.update({ 'data.compteurs.moral.value': Math.max(-3, Math.min(3, moral)) }); } } @@ -1533,13 +1457,11 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async setEthylisme(degre) { - let ethylisme = duplicate(this.data.data.compteurs.ethylisme); - ethylisme.value = degre; - ethylisme.nb_doses = 0; + await this.update({ "data.compteurs.ethylisme.value": degre }); + await this.update({ "data.compteurs.ethylisme.nb_doses": 0 }); if (degre == 1) { - ethylisme.jet_moral = false; + await this.update({ "data.compteurs.ethylisme.jetèmoral": false }); } - await this.update({ "data.data.compteurs.ethylisme": ethylisme }); } /* -------------------------------------------- */ @@ -1630,7 +1552,7 @@ export class RdDActor extends Actor { const perteDissolution = Math.max(0, Math.min(dissolution, conversion)); let stressRollData = { - alias: this.name, + actor: this, selectedCarac: this.data.data.carac.reve, rolled: stressRoll, stress: stress, @@ -1651,7 +1573,7 @@ export class RdDActor extends Actor { compteurs.experience.value += stressRollData.xp; compteurs.dissolution.value = dissolution - perteDissolution; compteurs.exaltation.value = 0; - await this.update({ "data.data.compteurs": compteurs }); + await this.update({ "data.compteurs": compteurs }); } /* -------------------------------------------- */ @@ -1688,63 +1610,54 @@ export class RdDActor extends Actor { action: r => this._appliquerAjoutExperience(r, game.settings.get("core", "rollMode") != 'blindroll') }; } - + /* -------------------------------------------- */ createCallbackAppelAuMoral() { /* Si l'appel au moral est utilisé, on l'affiche dans le chat et on diminue éventuellement le moral */ return { condition: r => r.use.appelAuMoral && game.settings.get("core", "rollMode") != 'selfroll', - action: r => { console.log("createCallbackAppelAuMoral"); this.displayAppelAuMoral ; console.log(r.rolled.isEchec); this._appliquerAppelMoral(r, game.settings.get("core", "rollMode") != 'blindroll') } + action: r => { console.log("createCallbackAppelAuMoral"); this.displayAppelAuMoral; console.log(r.rolled.isEchec); this._appliquerAppelMoral(r, game.settings.get("core", "rollMode") != 'blindroll') } }; } - + /* -------------------------------------------- */ async checkCaracXP(caracName) { let carac = this.data.data.carac[caracName]; - if (carac && carac.xp > 0) { - let xpNeeded = RdDUtility.getCaracNextXp(carac.value + 1); - if (carac.xp >= xpNeeded) { - carac = duplicate(carac); - carac.value = Number(carac.value) + 1; - - let xpData = { - alias: this.name, - carac: caracName, - value: carac.value, - xp: carac.xp - } - ChatUtility.createChatMessage(this.name, "default", { - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html`, xpData) + let xpNeeded = RdDUtility.getCaracNextXp(carac.value + 1); + if (carac && carac.xp >= xpNeeded) { + ChatUtility.createChatMessage(this.name, + "default", + { + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html`, { + actor: this, + carac: caracName, + value: Number(carac.value) + 1, + xp: carac.xp + }) }); - } } } /* -------------------------------------------- */ async checkCompetenceXP(compName, newXP = undefined) { - let competence = RdDItemCompetence.findCompetence(this.data.items, compName); + const competence = RdDItemCompetence.findCompetence(this.data.items, compName); if (competence && newXP && newXP == competence.data.xp) { // Si édition, mais sans changement XP return; } - newXP = (newXP) ? newXP : competence.data.xp; - if (competence && newXP > 0) { - let xpNeeded = RdDItemCompetence.getCompetenceNextXp(competence.data.niveau + 1); - if (newXP >= xpNeeded) { - let newCompetence = duplicate(competence); - newCompetence.data.niveau += 1; - newCompetence.data.xp = newXP; + newXP = newXP ?? competence.data.xp; + const niveau = competence.data.niveau + 1; + let xpNeeded = RdDItemCompetence.getCompetenceNextXp(niveau); + if (competence && newXP >= xpNeeded) { + ChatUtility.createChatMessage(this.name, "default", { + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html`, { + actor: this, + competence: competence.name, + niveau: niveau, + xp: newXP, + archetype: competence.data.niveau_archetype, + archetypeWarning: nexNiveau > competence.data.niveau_archetype + }) + }); - let xpData = { - alias: this.name, - competence: newCompetence.name, - niveau: newCompetence.data.niveau, - xp: newCompetence.data.xp, - archetype: newCompetence.data.niveau_archetype, - archetypeWarning: newCompetence.data.niveau > competence.data.niveau_archetype - } - ChatUtility.createChatMessage(this.name, "default", { - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html`, xpData) - }); - } } } @@ -1766,14 +1679,14 @@ export class RdDActor extends Actor { if (xpResult && xpResult.xpCarac > 0 && rollData.selectedCarac) { this.checkCaracXP(rollData.selectedCarac.name); } - } - + } + /* -------------------------------------------- */ async _appliquerAppelMoral(rollData, display = true) { if (!this.isPersonnage()) return; if (!rollData.rolled.isEchec) return; const waitUpdate = this.moralIncDec(-1); /* L'appel au moral a échoué. Le personnage perd un point de moral */ - rollData.jetEchouerMoralDiminuer = true; + rollData.jetEchouerMoralDiminuer = true; } /* -------------------------------------------- */ @@ -1884,7 +1797,7 @@ export class RdDActor extends Actor { if (rencSpecial) { rencSpecial = duplicate(rencSpecial); // To keep it if (rencSpecial.type != 'souffle') { - this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues + this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues addMsg = " La queue a été supprimée de votre fiche automatiquement"; } else { addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres manuellement."; @@ -1936,7 +1849,7 @@ export class RdDActor extends Actor { rollData.show = {} rollData.depenseReve = Number(selectedSort.data.ptreve_reel); - let myReve = duplicate(this.data.data.reve.reve); + let myReve = this.data.data.reve.reve.value; if (rolled.isSuccess) { // Réussite du sort ! if (rolled.isPart) { rollData.depenseReve = Math.max(Math.floor(rollData.depenseReve / 2), 1); @@ -1944,10 +1857,10 @@ export class RdDActor extends Actor { if (rollData.isSortReserve) { rollData.depenseReve++; } - if ( rollData.competence.name.includes('Thanatos')) { // Si Thanatos - myReve.thanatosused = true; + if (rollData.competence.name.includes('Thanatos')) { // Si Thanatos + await this.update({ "data.reve.reve.thanatosused": true }); } - if (myReve.value > rollData.depenseReve) { + if (myReve > rollData.depenseReve) { // Incrémenter/gére le bonus de case RdDItemSort.incrementBonusCase(this, selectedSort, rollData.tmr.coord); @@ -1963,15 +1876,15 @@ export class RdDActor extends Actor { } } else { if (rolled.isETotal) { // Echec total ! - rollData.depenseReve = Math.min(myReve.value, Math.floor(rollData.depenseReve * 1.5)) + rollData.depenseReve = Math.min(myReve, Math.floor(rollData.depenseReve * 1.5)) // TODO: mise en réserve d'un échec total... } else { rollData.depenseReve = 0 } } - myReve.value = Math.max(myReve.value - rollData.depenseReve, 0); - await this.update({ "data.data.reve.reve": myReve }); + myReve = Math.max(myReve - rollData.depenseReve, 0); + await this.update({ "data.reve.reve.value": myReve }); if (closeTMR) { this.currentTMR.close(); // Close TMR ! @@ -2034,7 +1947,7 @@ export class RdDActor extends Actor { label: 'Jet ' + Grammar.apostrophe('de', name), callbacks: [ this.createCallbackExperience(), - this.createCallbackAppelAuMoral(), + this.createCallbackAppelAuMoral(), { action: r => this._competenceResult(r) } ] }); @@ -2048,16 +1961,16 @@ export class RdDActor extends Actor { data: { carac: 'intellect', competence: 'Ecriture', - difficulte: item.data.data.difficulte, + difficulte: item.data.difficulte, periodicite: "60 minutes", fatigue: 2, - points_de_tache: item.data.data.points_de_tache, + points_de_tache: item.data.points_de_tache, points_de_tache_courant: 0, description: "Lecture du livre " + item.name + - " - XP : " + item.data.data.xp + " - Compétences : " + item.data.data.competence + " - XP : " + item.data.xp + " - Compétences : " + item.data.competence } } - await this.createOwnedItem(tache, { renderSheet: true }); + await this.createEmbeddedDocuments('Item', [tache], { renderSheet: true }); } /* -------------------------------------------- */ @@ -2092,7 +2005,7 @@ export class RdDActor extends Actor { async _tacheResult(rollData) { // Mise à jour de la tache rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache; - this.updateEmbeddedEntity("OwnedItem", rollData.tache); + this.updateEmbeddedDocuments('Item', [rollData.tache]); this.santeIncDec("fatigue", rollData.tache.data.fatigue); RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-tache.html'); @@ -2101,7 +2014,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _tacheETotal(rollData) { rollData.tache.data.difficulte--; - this.updateEmbeddedEntity("OwnedItem", rollData.tache); + this.updateEmbeddedDocuments('Item', [rollData.tache]); } /* -------------------------------------------- */ @@ -2116,7 +2029,7 @@ export class RdDActor extends Actor { selectedCarac: duplicate(this.data.data.carac[selected]) }); artData.competence.data.defaut_carac = selected; - if ( !artData.forceCarac ) { + if (!artData.forceCarac) { artData.forceCarac = {}; artData.forceCarac[selected] = duplicate(this.data.data.carac[selected]); } @@ -2156,17 +2069,17 @@ export class RdDActor extends Actor { const artData = { art: 'danse', verbe: 'Danser', forceCarac: {} }; const oeuvre = duplicate(this.getOeuvre(id, artData.art)); const selectedCarac = this._getCaracDanse(oeuvre); - if ( oeuvre.data.agilite) { - artData.forceCarac['agilite'] = duplicate(this.data.data.carac.agilite ); + if (oeuvre.data.agilite) { + artData.forceCarac['agilite'] = duplicate(this.data.data.carac.agilite); } - if ( oeuvre.data.apparence) { - artData.forceCarac['apparence'] = duplicate(this.data.data.carac.apparence ); + if (oeuvre.data.apparence) { + artData.forceCarac['apparence'] = duplicate(this.data.data.carac.apparence); } await this._rollArt(artData, selectedCarac, oeuvre); } /* -------------------------------------------- */ - _getCaracDanse(oeuvre) { + _getCaracDanse(oeuvre) { if (oeuvre.data.agilite) { return "agilite"; } else if (oeuvre.data.apparence) { return "apparence"; } const competence = this.getCompetence(oeuvre.data.competence); @@ -2263,7 +2176,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _meditationETotal(meditationData) { meditationData.meditation.data.malus--; - this.updateEmbeddedEntity("OwnedItem", meditationData.meditation); + this.updateEmbeddedDocuments('Item', [meditationData.meditation]); } /* -------------------------------------------- */ @@ -2277,7 +2190,7 @@ export class RdDActor extends Actor { async rollAppelChance(onSuccess = () => { }, onEchec = () => { }) { // Stocke si utilisation de la chance await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); - await this.setFlag('foundryvtt-reve-de-dragon', 'utilisationChance', true ); + await this.setFlag('foundryvtt-reve-de-dragon', 'utilisationChance', true); let rollData = { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' }; const dialog = await RdDRoll.create(this, rollData, @@ -2307,22 +2220,16 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async chanceActuelleIncDec(value, limit = true) { - let chance = duplicate(this.data.data.compteurs.chance); - chance.value = Math.max(chance.value + value, 0); - if (limit) { - chance.value = Math.min(chance.value, this.getChance()) - } - await this.update({ "data.data.compteurs.chance": chance }); + async chanceActuelleIncDec(value) { + await this.update({ "data.compteurs.chance.value": Math.min(this.getChance(), Math.max(this.data.data.compteurs.chance.value + value, 0)) }); } /* -------------------------------------------- */ async appelDestinee(onSuccess = () => { }, onEchec = () => { }) { if (this.data.data.compteurs.destinee?.value ?? 0 > 0) { ChatMessage.create({ content: `${this.name} a fait appel à la Destinée !` }); - let destinee = duplicate(this.data.data.compteurs.destinee); - destinee.value = destinee.value - 1; - await this.update({ "data.data.compteurs.destinee": destinee }); + let destinee = this.data.data.compteurs.destinee.value - 1; + await this.update({ "data.compteurs.destinee.value": destinee }); onSuccess(); } else { @@ -2358,7 +2265,6 @@ export class RdDActor extends Actor { return { result: false, xpcarac: 0, xpCompetence: 0 }; } - if (caracName == 'derobee') caracName = 'agilite'; let xp = Math.abs(rolled.finalLevel); let xpCarac = Math.floor(xp / 2); // impair: arrondi inférieur en carac let xpComp = 0; @@ -2366,19 +2272,17 @@ export class RdDActor extends Actor { xpComp = xp - xpCarac; competence = duplicate(competence); competence.data.xp = Misc.toInt(competence.data.xp) + xpComp; - await this.updateEmbeddedEntity("OwnedItem", competence); + await this.updateEmbeddedDocuments('Item', [competence]); } else { xpCarac = Math.max(xpCarac, 1); } if (xpCarac > 0) { - let carac = duplicate(this.data.data.carac); - let selectedCarac = RdDActor._findCaracByName(carac, caracName); - if (!selectedCarac.derivee) { - selectedCarac.xp = Misc.toInt(selectedCarac.xp) + xpCarac; - await this.update({ "data.data.carac": carac }); + const selected = RdDActor._findCaracByName(this.data.data.carac, caracName); + if (!selected.derivee) { + await this.update({ [`data.carac.${selected.label}.xp`]: selected.xp + xpCarac }); } else { ChatMessage.create({ - content: `Vous avez ${xpCarac} à répartir pour la caractéristique dérivée ${caracName}. Vous devez le faire manuellement.`, + content: `Vous devez répartir manuellement ${xpCarac} points d'expérience pour la caractéristique dérivée ${caracName}.`, whisper: ChatMessage.getWhisperRecipients(game.user.name) }); } @@ -2396,16 +2300,15 @@ export class RdDActor extends Actor { this._appliquerAjoutExperience(data); // Ajout du nombre astral - const item = { + await this.createEmbeddedDocuments('Item', [{ name: "Nombre Astral", type: "nombreastral", data: { value: data.nbAstral, istrue: data.isvalid, jourindex: Number(data.date), jourlabel: game.system.rdd.calendrier.getDateFromIndex(Number(data.date)) } - }; - await this.createEmbeddedEntity("OwnedItem", item); + }] + ); // Suppression des anciens nombres astraux let toDelete = this.data.items.filter((item) => item.data.jourindex < game.system.rdd.calendrier.getCurrentDayIndex()); - const deletions = toDelete.map(i => i._id); - await this.deleteEmbeddedEntity("OwnedItem", deletions); + await this.deleteEmbeddedDocuments('Item', toDelete.map(i => i._id)); // Affichage Dialog this.astrologieNombresAstraux(); @@ -2445,6 +2348,8 @@ export class RdDActor extends Actor { return carac.reve; case 'chance-actuelle': case 'chance actuelle': return carac.chance; + case 'derobee': + return carac.agilite; } for (const [key, value] of Object.entries(carac)) { if (name == key || name == value.label.toLowerCase()) { @@ -2456,7 +2361,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ getSortList() { - return this.data.items.filter(item => item.type == "sort"); + return this.data.items.filter(item => item.data.type == "sort"); } /* -------------------------------------------- */ @@ -2539,28 +2444,30 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ getArmeParade(armeParadeId) { - const item = armeParadeId ? this.getOwnedItem(armeParadeId) : undefined; + const item = armeParadeId ? this.items.get(armeParadeId) : undefined; return RdDItemArme.getArmeData(item); } /* -------------------------------------------- */ - verifierForceMin( item ) { - if ( item.type == 'arme' && item.data.force > this.data.data.carac.force.value ) { - ChatMessage.create( { content: `${this.name} s'est équipé(e) de l'arme ${item.name}, mais n'a pas une force suffisante pour l'utiliser normalement - (${item.data.force} nécessaire pour une Force de ${this.data.data.carac.force.value})` } ); + verifierForceMin(item) { + if (item.data.type == 'arme' && item.data.force > this.data.data.carac.force.value) { + ChatMessage.create({ + content: `${this.name} s'est équipé(e) de l'arme ${item.name}, mais n'a pas une force suffisante pour l'utiliser normalement + (${item.data.force} nécessaire pour une Force de ${this.data.data.carac.force.value})` + }); } } /* -------------------------------------------- */ async equiperObjet(itemID) { - let item = this.getOwnedItem(itemID); + let item = this.items.get(itemID); if (item && item.data.data) { - let update = { _id: item._id, "data.equipe": !item.data.data.equipe }; - await this.updateEmbeddedEntity("OwnedItem", update); + let update = { _id: item._id, "data.equipe": !item.data.equipe }; + await this.updateEmbeddedDocuments('Item', [update]); this.computeEncombrementTotalEtMalusArmure(); // Mise à jour encombrement this.computePrixTotalEquipement(); // Mis à jour du prix total de l'équipement - if ( item.data.data.equipe ) - this.verifierForceMin( item.data ); + if (item.data.equipe) + this.verifierForceMin(item.data.data); } } @@ -2581,10 +2488,10 @@ export class RdDActor extends Actor { protection = Math.max(protection - penetration, 0); protection += this.getProtectionNaturelle(); // Gestion des cas particuliers sur la fenêtre d'encaissement - if ( attackerRoll.dmg.encaisserSpecial && attackerRoll.dmg.encaisserSpecial == "noarmure") { + if (attackerRoll.dmg.encaisserSpecial && attackerRoll.dmg.encaisserSpecial == "noarmure") { protection = 0; } - if ( attackerRoll.dmg.encaisserSpecial && attackerRoll.dmg.encaisserSpecial == "chute" && Number(protection) > 2) { + if (attackerRoll.dmg.encaisserSpecial && attackerRoll.dmg.encaisserSpecial == "chute" && Number(protection) > 2) { protection = 2; } console.log("Final protect", protection, attackerRoll); @@ -2613,7 +2520,7 @@ export class RdDActor extends Actor { } ChatMessage.create({ content: "Votre armure s'est détériorée, elle protège maintenant de " + update.data.protection }); } - this.updateEmbeddedEntity("OwnedItem", update); + this.updateEmbeddedDocuments('Item', [update]); } /* -------------------------------------------- */ @@ -2644,7 +2551,7 @@ export class RdDActor extends Actor { this.sheet.render(false); mergeObject(encaissement, { - alias: this.data.name, + actor: this, hasPlayerOwner: this.hasPlayerOwner, resteEndurance: this.data.data.sante.endurance.value, sonne: perteEndurance.sonne, @@ -2681,7 +2588,7 @@ export class RdDActor extends Actor { let encaissement = RdDUtility.selectEncaissement(jetTotal, rollData.dmg.mortalite) let over20 = Math.max(jetTotal - 20, 0); encaissement.dmg = rollData.dmg; - encaissement.dmg.loc = rollData.dmg.loc ?? RdDUtility.getLocalisation( this.data.type ); + encaissement.dmg.loc = rollData.dmg.loc ?? RdDUtility.getLocalisation(this.data.type); encaissement.dmg.loc.label = encaissement.dmg.loc.label ?? 'Corps;' encaissement.roll = roll; encaissement.armure = armure; @@ -2753,7 +2660,7 @@ export class RdDActor extends Actor { } encaissement.endurance = Math.max(encaissement.endurance, -endActuelle); - this.update({ "data.data.blessures": blessures }); + this.update({ "data.blessures": blessures }); } /* -------------------------------------------- */ @@ -2770,34 +2677,34 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async resetItemUse( ) { + async resetItemUse() { await this.unsetFlag('foundryvtt-reve-de-dragon', 'itemUse'); - await this.setFlag('foundryvtt-reve-de-dragon', 'itemUse', {} ); + await this.setFlag('foundryvtt-reve-de-dragon', 'itemUse', {}); } /* -------------------------------------------- */ - async decItemUse( itemId ) { + async decItemUse(itemId) { let itemUse = duplicate(this.getFlag('foundryvtt-reve-de-dragon', 'itemUse') ?? {}); itemUse[itemId] = (itemUse[itemId] ?? 0) - 1; - await this.setFlag( 'foundryvtt-reve-de-dragon', 'itemUse', itemUse); + await this.setFlag('foundryvtt-reve-de-dragon', 'itemUse', itemUse); console.log("ITEM USE DEC", itemUse); } /* -------------------------------------------- */ - async incItemUse( itemId ) { + async incItemUse(itemId) { let itemUse = duplicate(this.getFlag('foundryvtt-reve-de-dragon', 'itemUse') ?? {}); itemUse[itemId] = (itemUse[itemId] ?? 0) + 1; - await this.setFlag( 'foundryvtt-reve-de-dragon', 'itemUse', itemUse); + await this.setFlag('foundryvtt-reve-de-dragon', 'itemUse', itemUse); console.log("ITEM USE INC", itemUse); } /* -------------------------------------------- */ - getItemUse( itemId ) { + getItemUse(itemId) { let itemUse = this.getFlag('foundryvtt-reve-de-dragon', 'itemUse') ?? {}; console.log("ITEM USE GET", itemUse); return itemUse[itemId] ?? 0; } - + /* -------------------------------------------- */ /* -- entites -- */ /* retourne true si on peut continuer, false si on ne peut pas continuer */ @@ -2818,7 +2725,7 @@ export class RdDActor extends Actor { let rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.data.data.carac.niveau.value)); const rollData = { - alias: this.name, + actor: this, rolled: rolled, entite: entite.name, selectedCarac: this.data.data.carac.reve @@ -2859,7 +2766,7 @@ export class RdDActor extends Actor { return; } resonnance.actors.push(attaquant._id); - await this.update({ "data.data.sante.resonnance": resonnance }); + await this.update({ "data.sante.resonnance": resonnance }); return; } /* -------------------------------------------- */ @@ -2902,7 +2809,7 @@ export class RdDActor extends Actor { sumDenier = Number(sumDenier); let denierDisponible = 0; - let monnaie = this.data.items.filter(item => item.type == 'monnaie'); + let monnaie = this.data.items.filter(item => item.data.type == 'monnaie'); for (let piece of monnaie) { denierDisponible += piece.data.valeur_deniers * Number(piece.data.quantite); } @@ -2923,7 +2830,7 @@ export class RdDActor extends Actor { if (dataObj && isPayed) { dataObj.payload.data.cout = sumDenier / 100; // Mise à jour du prix en sols , avec le prix acheté dataObj.payload.data.quantite = quantite; - await this.createOwnedItem(dataObj.payload); + await this.createEmbeddedDocuments('Item', [dataObj.payload]); msg += `
Et l'objet ${dataObj.payload.name} a été ajouté à votre inventaire.`; } @@ -2936,20 +2843,18 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async monnaieIncDec(id, value) { - let monnaie = this.data.items.find(item => item.type == 'monnaie' && item._id == id); + let monnaie = this.data.items.find(item => item.data.type == 'monnaie' && item._id == id); if (monnaie) { - monnaie.data.quantite += value; - if (monnaie.data.quantite < 0) monnaie.data.quantite = 0; // Sanity check - const update = { _id: monnaie._id, 'data.quantite': monnaie.data.quantite }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); + monnaie.data.data.quantite = Math.max(0, monnaie.data.data.quantite + value); // Sanity check + await this.updateEmbeddedDocuments('Item', [{ _id: monnaie._id, 'data.quantite': monnaie.data.data.quantite }]); } } /* -------------------------------------------- */ async effectuerTacheAlchimie(recetteId, alchimieName, alchimieData) { - let recette = this.data.items.find(item => item.type == 'recettealchimique' && item._id == recetteId); + let recette = this.data.items.find(item => item.data.type == 'recettealchimique' && item._id == recetteId); if (recette) { - let competence = this.data.items.find(item => item.type == 'competence' && item.name.toLowerCase() == "alchimie"); + let competence = this.data.items.find(item => item.data.type == 'competence' && item.name.toLowerCase() == "alchimie"); let diffAlchimie = RdDAlchimie.getDifficulte(alchimieData); let rollData = { recette: recette, @@ -3079,7 +2984,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ enleverTousLesEffets() { - this.deleteEmbeddedEntity('ActiveEffect', Array.from(this.effects?.keys() ?? [])); + this.deleteEmbeddedDocuments('ActiveEffect', Array.from(this.effects?.keys() ?? [])); } /* -------------------------------------------- */ @@ -3158,16 +3063,15 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - async updateEmbeddedEntity(embeddedName, data, options) { - if (data && data['data.defaut_carac'] && data['data.xp']) { // C'est une compétence - this.checkCompetenceXP(data['name'], data['data.xp']); - } - return super.updateEmbeddedEntity(embeddedName, data, options); + async updateEmbeddedDocuments(embeddedName, documents, options) { + documents.filter(data => data && data['data.defaut_carac'] && data['data.xp']) + .forEach(data => this.checkCompetenceXP(data['name'], data['data.xp'])); + return super.updateEmbeddedDocuments(embeddedName, documents, options); } /* -------------------------------------------- */ async onCreateOwnedItem(item, options, id) { - switch (item.type) { + switch (item.data.type) { case 'tete': case 'queue': case 'ombre': @@ -3178,7 +3082,7 @@ export class RdDActor extends Actor { } async onDeleteOwnedItem(item, options, id) { - switch (item.type) { + switch (item.data.type) { case 'tete': case 'queue': case 'ombre': @@ -3216,10 +3120,11 @@ export class RdDActor extends Actor { } } - notifyGestionTeteSouffleQueue(item, manualMessage=true){ + notifyGestionTeteSouffleQueue(item, manualMessage = true) { ChatMessage.create({ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est" } géré automatiquement. ${manualMessage ?? ''}` + content: `${this.name} a reçu un/une ${item.data.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré automatiquement. ${manualMessage ?? ''}` }); - }} + } +} diff --git a/module/item-arme.js b/module/item-arme.js index 00e6fe8b..9a3302f4 100644 --- a/module/item-arme.js +++ b/module/item-arme.js @@ -18,15 +18,15 @@ const nomCategorieParade = { export class RdDItemArme extends Item { static isArme(item) { - return (item.type == 'competencecreature' && item.data.iscombat) || item.type == 'arme'; + return (item.data.type == 'competencecreature' && item.data.iscombat) || item.data.type == 'arme'; } /* -------------------------------------------- */ static getArmeData(item) { switch (item ? item.data.type : '') { - case 'arme': return item.data; + case 'arme': return item.data.data; case 'competencecreature': - return RdDItemCompetenceCreature.toArme(item.data); + return RdDItemCompetenceCreature.toArme(item.data.data); } return RdDItemArme.mainsNues(); } @@ -146,7 +146,7 @@ export class RdDItemArme extends Item { } static isArmeUtilisable(item) { - return item.type == 'arme' && (item.data.resistance > 0 || item.data.portee_courte>0); + return item.data.type == 'arme' && (item.data.resistance > 0 || item.data.portee_courte>0); } static mainsNues(actorData={}) { diff --git a/module/item-competence.js b/module/item-competence.js index 40d32513..7f3e21cc 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -17,10 +17,19 @@ function _buildCumulXP() { return cumulXP; } +const compendiumCompetences = { + "personnage": "foundryvtt-reve-de-dragon.competences", + "creature": "foundryvtt-reve-de-dragon.competences-creatures", + "entite": "foundryvtt-reve-de-dragon.competences-entites" +}; + const competence_xp_cumul = _buildCumulXP(); export class RdDItemCompetence extends Item { + static compendium(actorType){ + return compendiumCompetences[actorType] ?? ''; + } /* -------------------------------------------- */ static isCompetenceArme(competence) { switch (competence.data.categorie) { diff --git a/module/item-competencecreature.js b/module/item-competencecreature.js index 3835bc12..ce431f93 100644 --- a/module/item-competencecreature.js +++ b/module/item-competencecreature.js @@ -17,7 +17,7 @@ export class RdDItemCompetenceCreature extends Item { /* -------------------------------------------- */ static toArme(item) { if (RdDItemCompetenceCreature.isCompetenceAttaque(item)) { - let arme = { name: item.name, data: duplicate(item.data) }; + let arme = { name: item.name, data: duplicate(item.data.data) }; mergeObject(arme.data, { competence: item.name, @@ -35,11 +35,11 @@ export class RdDItemCompetenceCreature extends Item { /* -------------------------------------------- */ static isCompetenceAttaque(item) { - return item.type == 'competencecreature' && item.data.iscombat; + return item.data.type == 'competencecreature' && item.data.iscombat; } /* -------------------------------------------- */ static isCompetenceParade(item) { - return item.type == 'competencecreature' && item.data.isparade; + return item.data.type == 'competencecreature' && item.data.isparade; } } diff --git a/module/item-monnaie.js b/module/item-monnaie.js new file mode 100644 index 00000000..b0aa806e --- /dev/null +++ b/module/item-monnaie.js @@ -0,0 +1,30 @@ + + +const monnaiesParDefaut = [ + { name: "Etain (1 denier)", valeur: 1, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp" }, + { name: "Bronze (10 deniers)", valeur: 10, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp" }, + { name: "Argent (1 sol)", valeur: 100, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp" }, + { name: "Or (10 sols)", valeur: 1000, enc: 0.01, img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp" } +] + +export class Monnaie { + + static monnaiesParDefaut() { + return monnaiesParDefaut.map(it => Monnaie.prepareMonnaie(it.name, it.valeur, it.img, it.enc)); + } + + /* -------------------------------------------- */ + static prepareMonnaie(name, valeur_deniers, img = "", enc = 0.01) { + let piece = { + name: name, type: 'monnaie', img: img, _id: randomID(16), + data: { + quantite: 0, + valeur_deniers: valeur_deniers, + encombrement: enc, + description: "" + } + } + return piece; + } + +} \ No newline at end of file diff --git a/module/item-sheet.js b/module/item-sheet.js index a5275f94..a559f6f0 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -13,7 +13,7 @@ export class RdDItemSheet extends ItemSheet { /** @override */ static get defaultOptions() { return mergeObject(super.defaultOptions, { - classes: ["foundryvtt-reve-de-dragon", "sheet", "item"], + classes: ["foundryvtt-reve-de-dragon", "sheet", 'Item'], template: "systems/foundryvtt-reve-de-dragon/templates/item-sheet.html", width: 550, height: 550 @@ -30,7 +30,7 @@ export class RdDItemSheet extends ItemSheet { { class: "post", icon: "fas fa-comment", - onclick: ev => new RdDItem(this.item.data).postItem() + onclick: ev => new RdDItem(this.item.data.data).postItem() }) return buttons } @@ -50,14 +50,14 @@ export class RdDItemSheet extends ItemSheet { let sheetData = super.getData(); sheetData.categorieCompetences = RdDUtility.getCategorieCompetences(); - if ( sheetData.item.type == 'tache' || sheetData.item.type == 'livre' || sheetData.item.type == 'meditation' || sheetData.item.type == 'oeuvre') { + if ( sheetData.item.data.type == 'tache' || sheetData.item.data.type == 'livre' || sheetData.item.data.type == 'meditation' || sheetData.item.data.type == 'oeuvre') { sheetData.caracList = duplicate(game.system.model.Actor.personnage.carac); sheetData.competences = await RdDUtility.loadCompendiumNames( 'foundryvtt-reve-de-dragon.competences' ); } - if (sheetData.item.type == 'arme') { + if (sheetData.item.data.type == 'arme') { sheetData.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it)); } - if ( sheetData.item.type == 'recettealchimique' ) { + if ( sheetData.item.data.type == 'recettealchimique' ) { RdDAlchimie.processManipulation(sheetData.item, this.actor && this.actor.id ); } if ( this.actor ) { @@ -120,7 +120,7 @@ export class RdDItemSheet extends ItemSheet { /* -------------------------------------------- */ get template() { - let type = this.item.type; + let type = this.item.data.type; return `systems/foundryvtt-reve-de-dragon/templates/item-${type}-sheet.html`; } diff --git a/module/item-sort.js b/module/item-sort.js index d529f879..17d0317f 100644 --- a/module/item-sort.js +++ b/module/item-sort.js @@ -53,7 +53,7 @@ export class RdDItemSort extends Item { */ static getBonusCaseList( data, newCase = false ) { // Gestion spéciale case bonus - if ( data.item.type == 'sort') { + if ( data.item.data.type == 'sort') { return this.buildBonusCaseList(data.data.bonuscase, newCase ); } return undefined; @@ -106,7 +106,7 @@ export class RdDItemSort extends Item { // Sauvegarde/update let bonuscase = StringList.toString(); //console.log("Bonus cae :", bonuscase); - actor.updateEmbeddedEntity("OwnedItem", { _id: sort._id, 'data.bonuscase': bonuscase } ); + actor.updateEmbeddedDocuments('Item', [{ _id: sort._id, 'data.bonuscase': bonuscase }]); } /* -------------------------------------------- */ diff --git a/module/misc.js b/module/misc.js index f1220c35..0b404627 100644 --- a/module/misc.js +++ b/module/misc.js @@ -6,26 +6,24 @@ export class Misc { static isFunction(v) { return v && {}.toString.call(v) === '[object Function]'; - } + } static upperFirst(text) { return text.charAt(0).toUpperCase() + text.slice(1); } - static toSignedString(number){ + static toSignedString(number) { const value = parseInt(number) const isPositiveNumber = value != NaN && value > 0; - return isPositiveNumber ? "+"+number : number + return isPositiveNumber ? "+" + number : number } /** * Converts the value to an integer, or to 0 if undefined/null/not representing integer * @param {*} value value to convert to an integer using parseInt */ - static toInt(value) - { - if (value == undefined) - { + static toInt(value) { + if (value == undefined) { return 0; } const parsed = parseInt(value); @@ -41,13 +39,13 @@ export class Misc { } } - static classify(items, classifier = it => it.type, transform = it => it) { + static classify(items, classifier = item => item.type, transform = it => it) { let itemsBy = {}; Misc.classifyInto(itemsBy, items, classifier, transform); return itemsBy; } - static classifyInto(itemsBy, items, classifier = it => it.type, transform = it => it) { + static classifyInto(itemsBy, items, classifier = item => item.type, transform = it => it) { for (const item of items) { const classification = classifier(item); let list = itemsBy[classification]; @@ -66,5 +64,4 @@ export class Misc { static distinct(array) { return [...new Set(array)]; } - } \ No newline at end of file diff --git a/module/rdd-astrologie-joueur.js b/module/rdd-astrologie-joueur.js index eccad906..511bbc6e 100644 --- a/module/rdd-astrologie-joueur.js +++ b/module/rdd-astrologie-joueur.js @@ -43,7 +43,7 @@ export class RdDAstrologieJoueur extends Dialog { /* -------------------------------------------- */ static organizeNombres(actor) { - let itemNombres = actor.data.items.filter( (item) => item.type == 'nombreastral'); + let itemNombres = actor.data.items.filter( (item) => item.data.type == 'nombreastral'); let itemFiltered = {}; for ( let item of itemNombres) { if ( itemFiltered[item.data.jourindex] ) { @@ -91,7 +91,7 @@ export class RdDAstrologieJoueur extends Dialog { $("#diffConditions").val(0); }); - html.find('#jet-astrologie').click((event) => { + html.find('.jet-astrologie').click((event) => { this.requestJetAstrologie(); }); } diff --git a/module/rdd-combat.js b/module/rdd-combat.js index dafda8ed..789e9b1d 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -78,14 +78,14 @@ export class RdDCombatManager extends Combat { let armeCombat, competence; if (c.actor.data.type == 'creature' || c.actor.data.type == 'entite') { for (const competenceItem of c.actor.data.items) { - if (competenceItem.data.iscombat) { + if (competenceitem.data.iscombat) { competence = duplicate(competenceItem); } } rollFormula = "2+( (" + RdDCombatManager.calculInitiative(competence.data.niveau, competence.data.carac_value) + ")/100)"; } else { for (const item of c.actor.data.items) { - if (item.type == "arme" && item.data.equipe) { + if (item.data.type == "arme" && item.data.equipe) { armeCombat = duplicate(item); } } @@ -99,7 +99,7 @@ export class RdDCombatManager extends Combat { const roll = super._getInitiativeRoll(c, rollFormula); if (roll.total <= 0) roll.total = 0.00; console.log("Compute init for", rollFormula, roll.total); - await this.updateEmbeddedEntity("Combatant", { _id: c._id, initiative: roll.total }); + await this.updateEmbeddedDocuments("Combatant", [{ _id: c._id, initiative: roll.total }]); // Send a chat message let rollMode = messageOptions.rollMode || game.settings.get("core", "rollMode"); @@ -211,7 +211,7 @@ export class RdDCombatManager extends Combat { let msg = `

L'initiative de ${combatant.actor.name} a été modifiée !


- Etant donné son ${arme.name}, son initative pour ce premier round est désormais de ${initData.init}. + Etant donné son ${arme.name}, son initiative pour ce premier round est désormais de ${initData.init}.
` ChatMessage.create({ content: msg }); game.combat.setInitiative(combatant._id, initData.init); @@ -725,7 +725,7 @@ export class RdDCombat { /* -------------------------------------------- */ async _onAttaqueParticuliere(rollData) { RdDCombat._storeAttaque(this.attackerId, rollData); - this.attacker.decItemUse( rollData.arme._id ); // Usage décrémenté sur particulière + this.attacker.decItemUse(rollData.arme._id); // Usage décrémenté sur particulière // Finesse et Rapidité seulement en mêlée et si la difficulté libre est de -1 minimum const isMeleeDiffNegative = rollData.selectedCarac.label == "Mêlée" && rollData.diffLibre < 0; @@ -733,7 +733,7 @@ export class RdDCombat { alias: this.attacker.name, whisper: ChatUtility.getWhisperRecipientsAndGMs(this.attacker.name), content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', { - alias: this.attacker.name, + actor: this.attacker, attackerId: this.attackerId, defenderTokenId: this.defenderTokenId, isFinesse: isMeleeDiffNegative, @@ -1109,7 +1109,7 @@ export class RdDCombat { resistance -= perteResistance; defenderRoll.show.deteriorationArme = resistance <= 0 ? 'brise' : 'perte'; defenderRoll.show.perteResistance = perteResistance; - this.defender.updateEmbeddedEntity("OwnedItem", { _id: defenderRoll.arme._id, 'data.resistance': resistance }); + this.defender.updateEmbeddedDocuments('Item', [{ _id: defenderRoll.arme._id, 'data.resistance': resistance }]); } } } else { @@ -1126,7 +1126,7 @@ export class RdDCombat { resistance -= dmg; defenderRoll.show.deteriorationArme = resistance <= 0 ? 'brise' : 'perte'; defenderRoll.show.perteResistance = dmg; - this.defender.updateEmbeddedEntity("OwnedItem", { _id: defenderRoll.arme._id, 'data.resistance': resistance }); + this.defender.updateEmbeddedDocuments('Item', [{ _id: defenderRoll.arme._id, 'data.resistance': resistance }]); } } // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132) @@ -1248,7 +1248,7 @@ export class RdDCombat { static async displayActorCombatStatus(combat, actor) { let data = { combatId: combat._id, - alias: actor.name, + actor: actor, etatGeneral: actor.getEtatGeneral(), isSonne: actor.getSonne(), blessuresStatus: actor.computeResumeBlessure(), diff --git a/module/rdd-hotbar-drop.js b/module/rdd-hotbar-drop.js index 12b925bb..0725f0a0 100644 --- a/module/rdd-hotbar-drop.js +++ b/module/rdd-hotbar-drop.js @@ -11,11 +11,11 @@ export class RdDHotbar { Hooks.on("hotbarDrop", async (bar, data, slot) => { // Create item macro if rollable item - weapon, spell, prayer, trait, or skill - if (data.type == "Item") { + if (data.type == 'Item') { if (data.data.type != "arme" && data.data.type != "competence" ) return let item = data.data - let command = `game.system.rdd.RdDHotbar.rollMacro("${item.name}", "${item.type}");`; + let command = `game.system.rdd.RdDHotbar.rollMacro("${item.name}", "${item.data.type}");`; let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command)); if (!macro) { macro = await Macro.create({ @@ -70,10 +70,10 @@ export class RdDHotbar { let item = actor ? actor.items.find(i => i.name === itemName && i.type == itemType) : null; if (!item) return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`); - item = item.data; + item = item.data.data; // Trigger the item roll - switch (item.type) { + switch (item.data.type) { case "arme": return actor.rollArme(item.data.competence, itemName); case "competence": diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 11a83bf4..c4e56bb7 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -39,7 +39,7 @@ export class RdDRoll extends Dialog { /* -------------------------------------------- */ static _setDefaultOptions(actor, rollData) { let defaultRollData = { - alias: actor.name, + actor: actor, ajustementsConditions: CONFIG.RDD.ajustementsConditions, difficultesLibres: CONFIG.RDD.difficultesLibres, etat: actor.getEtatGeneral(), diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 2312b1d7..6f67b0b7 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -76,7 +76,7 @@ export class RdDTMRDialog extends Dialog { } loadRencontres() { - this.rencontresExistantes = duplicate(this.actor.getTMRRencontres()).list; + this.rencontresExistantes = duplicate(this.actor.getTMRRencontres()); } /* -------------------------------------------- */ @@ -304,7 +304,6 @@ export class RdDTMRDialog extends Dialog { let rencontreData = { actor: this.actor, - alias: this.actor.name, reveDepart: this.actor.getReveActuel(), competence: this.actor.getBestDraconic(), rencontre: this.currentRencontre, @@ -431,7 +430,6 @@ export class RdDTMRDialog extends Dialog { // simuler une rencontre let rencontreData = { actor: this.actor, - alias: this.actor.name, reveDepart: this.actor.getReveActuel(), competence: this.actor.getBestDraconic(), rencontre: this.currentRencontre, diff --git a/module/rdd-utility.js b/module/rdd-utility.js index fcce0eac..491becac 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -690,20 +690,6 @@ export class RdDUtility { }); } - /* -------------------------------------------- */ - static createMonnaie(name, valeur_deniers, img = "", enc = 0.01) { - let piece = { - name: name, type: 'monnaie', img: img, _id: randomID(16), - data: { - quantite: 0, - valeur_deniers: valeur_deniers, - encombrement: enc, - description: "" - } - } - return piece; - } - /* -------------------------------------------- */ static afficherDemandePayer(som1, som2) { som1 = (som1) ? som1.toLowerCase() : "0d"; @@ -784,7 +770,7 @@ export class RdDUtility { label: "Supprimer l'objet", callback: () => { console.log("Delete : ", itemId); - actorSheet.actor.deleteOwnedItem(itemId); + actorSheet.actor.deleteEmbeddedDocuments('Item', [itemId]); li.slideUp(200, () => actorSheet.render(false)); } }, diff --git a/module/tmr-utility.js b/module/tmr-utility.js index cd2d3387..5d437424 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -293,7 +293,7 @@ export class TMRUtility { tmr.coord = coord; tmr.genre = TMRType[tmr.type].genre; } - let tmrByType = Misc.classify(Object.values(TMRMapping)); + let tmrByType = Misc.classify(Object.values(TMRMapping), tmr => tmr.type); for (const [type, list] of Object.entries(tmrByType)) { TMRType[type].list = list; } diff --git a/module/tmr/conquete.js b/module/tmr/conquete.js index ba7dffeb..dd19ea67 100644 --- a/module/tmr/conquete.js +++ b/module/tmr/conquete.js @@ -36,7 +36,7 @@ export class Conquete extends Draconique { } async onActorDeleteCaseTmr(actor, casetmr) { - await actor.deleteOwnedItem(casetmr.data.sourceid); + await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]); } } diff --git a/module/tmr/draconique.js b/module/tmr/draconique.js index 4bf8a34d..3d10df82 100644 --- a/module/tmr/draconique.js +++ b/module/tmr/draconique.js @@ -123,24 +123,20 @@ export class Draconique { } async createCaseTmr(actor, label, tmr, sourceId = undefined) { - await actor.createOwnedItem({ + await actor.createEmbeddedDocuments('Item', [{ name: label, type: 'casetmr', img: this.img(), _id: randomID(16), data: { coord: tmr.coord, specific: this.code(), sourceid: sourceId } - }); + }]); } async deleteCasesTmr(actor, draconique) { let caseTmrs = actor.data.items.filter(it => this.isCase(it) && it.data.sourceid == draconique._id); - for (let casetmr of caseTmrs) { - await actor.deleteOwnedItem(casetmr._id); - } + await actor.deleteEmbeddedDocuments('Item', caseTmrs.map(it =>it._id)); } async onVisiteSupprimer(actor, tmr, onRemoveToken) { let existants = actor.data.items.filter(it => this.isCase(it, tmr.coord)); - for (let casetmr of existants) { - await actor.deleteOwnedItem(casetmr._id); - onRemoveToken(tmr, casetmr); - } + await actor.deleteEmbeddedDocuments('Item', [ existants.map(it => it._id)]); + existants.forEach(it => onRemoveToken(tmr, it)); } } \ No newline at end of file diff --git a/module/tmr/pelerinage.js b/module/tmr/pelerinage.js index ec9e4010..0da79c9d 100644 --- a/module/tmr/pelerinage.js +++ b/module/tmr/pelerinage.js @@ -32,7 +32,7 @@ export class Pelerinage extends Draconique { } async onActorDeleteCaseTmr(actor, casetmr) { - await actor.deleteOwnedItem(casetmr.data.sourceid); + await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]); } } diff --git a/module/tmr/present-cites.js b/module/tmr/present-cites.js index c6967b94..9ec7d717 100644 --- a/module/tmr/present-cites.js +++ b/module/tmr/present-cites.js @@ -60,6 +60,6 @@ export class PresentCites extends Draconique { } async ouvrirLePresent(actor, casetmr) { - await actor.deleteOwnedItem(casetmr._id); + await actor.deleteEmbeddedDocuments('Item', [casetmr._id]); } } diff --git a/module/tmr/urgence-draconique.js b/module/tmr/urgence-draconique.js index 8af5c992..417ec380 100644 --- a/module/tmr/urgence-draconique.js +++ b/module/tmr/urgence-draconique.js @@ -23,8 +23,8 @@ export class UrgenceDraconique extends Draconique { whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), content: `En l'absence de sorts en réserve, l'urgence draconique de ${actor.name} se transforme en ${queue.name}` }); - await actor.createOwnedItem(ideeFixe); - await actor.deleteOwnedItem(queue._id); + await actor.createEmbeddedDocuments('Item', [ideeFixe]); + await actor.deleteEmbeddedDocuments('Item', [queue._id]); return; } else { @@ -36,7 +36,7 @@ export class UrgenceDraconique extends Draconique { } async onActorDeleteCaseTmr(actor, casetmr) { - await actor.deleteOwnedItem(casetmr.data.sourceid); + await actor.deleteEmbeddedDocuments('Item', [casetmr.data.sourceid]); } code() { return 'urgence' } diff --git a/styles/simple.css b/styles/simple.css index fb4342b2..8e5ece73 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -521,7 +521,7 @@ section.sheet-body:after { width: 50px; } -#vie-plus, #vie-moins, #endurance-plus, #endurance-moins, #fatigue-plus, #fatigue-moins, #ptreve-actuel-plus, #ptreve-actuel-moins, .monnaie-plus, .monnaie-moins { +.ajustement-compteur { display: inline-block; width: 1.25rem; background: rgba(30, 25, 20, 1); diff --git a/templates/actor-creature-sheet.html b/templates/actor-creature-sheet.html index ebd54730..e8e701f1 100644 --- a/templates/actor-creature-sheet.html +++ b/templates/actor-creature-sheet.html @@ -10,13 +10,13 @@
- Encaisser des dommages + Encaisser des dommages Remise à neuf
- {{calc.resumeBlessures}} + {{calc.blessures.resume}}
{{#if calc.surprise}}{{calc.surprise}}! {{/if}} @@ -27,7 +27,7 @@ {{/each}} {{#if options.isGM}} - (enlever tout) + (enlever tout) {{/if}} {{else}} Aucun effet actif @@ -215,14 +215,14 @@ {{#each data.objets as |item id|}} {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} + {{#if (ne item.data.type 'conteneur')}}
  • {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} + {{item.data.data.quantite}} + {{numberFormat item.data.data.encTotal decimals=2}} diff --git a/templates/actor-entite-sheet.html b/templates/actor-entite-sheet.html index a85f3518..c61d8b8d 100644 --- a/templates/actor-entite-sheet.html +++ b/templates/actor-entite-sheet.html @@ -10,7 +10,7 @@
  • - Encaisser des dommages + Encaisser des dommages Remise à neuf
    diff --git a/templates/actor-humanoide-sheet.html b/templates/actor-humanoide-sheet.html index 7c7695e6..498a0e05 100644 --- a/templates/actor-humanoide-sheet.html +++ b/templates/actor-humanoide-sheet.html @@ -10,13 +10,13 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf
    - {{calc.resumeBlessures}} + {{calc.blessures.resume}}
    @@ -42,13 +42,11 @@ {{#each data.carac as |carac key|}}
  • {{#if carac.isTaille}} - {{carac.label}} + {{carac.label}} {{else}} - {{carac.label}} + {{carac.label}} {{/if}} - +
  • {{/each}}
  • @@ -197,14 +195,14 @@
  • {{#each data.objets as |item id|}} {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} + {{#if (ne item.data.type 'conteneur')}}
  • {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} + {{item.data.data.quantite}} + {{numberFormat item.data.data.encTotal decimals=2}} diff --git a/templates/actor-inventaire-conteneur.html b/templates/actor-inventaire-conteneur.html index 8de6a09b..39d1254b 100644 --- a/templates/actor-inventaire-conteneur.html +++ b/templates/actor-inventaire-conteneur.html @@ -1,14 +1,14 @@
  • - {{#if (eq item.type 'conteneur')}} + {{#if (eq item.data.type 'conteneur')}} +{{item.name}} {{else}} {{item.name}} {{/if}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} + {{item.data.data.quantite}} + {{numberFormat item.data.data.encTotal decimals=2}}
    diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index bb5e1bef..cd6bd1f6 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -1,4 +1,3 @@ -{{log "handlebar" this}}
    {{!-- Sheet Header --}} @@ -12,30 +11,30 @@
    • @@ -47,22 +46,22 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf - Dormir une heure - Chateau Dormant - Montée dans les Terres Médianes ! - Montée accélérée dans les Terres Médianes ! - Regarder les Terres Médianes + Dormir une heure + Chateau Dormant + Montée dans les Terres Médianes ! + Montée accélérée dans les Terres Médianes ! + Regarder les Terres Médianes
    Malus de fatigue : {{calc.fatigue.malus}} @@ -78,13 +77,10 @@ {{#if calc.surprise}}{{calc.surprise}}! {{/if}} {{#if actor.effects}} {{#each actor.effects as |effect key|}} - {{log "handlebar effect" effect}} - - {{effect.data.label}} - + {{effect.data.label}} {{/each}} - {{#if options.isGM}} - (enlever tout) + {{#if options.isGM}} + (enlever tout) {{/if}} {{else}} Aucun effet actif @@ -165,7 +161,7 @@
  • {{attr.label}} : {{#if (eq key 'protection')}} - + {{else}} {{attr.value}} {{/if}} @@ -175,9 +171,9 @@
  • @@ -779,7 +775,7 @@
  • - Astrologie : Nombres Astraux + Astrologie : Nombres Astraux
  • @@ -911,7 +907,7 @@ {{piece.name}} {{piece.data.quantite}} - +- + +-
    @@ -941,14 +937,14 @@ {{#each data.objets as |item id|}} {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} + {{#if (ne item.data.type 'conteneur')}}
  • {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} + {{item.data.data.quantite}} + {{numberFormat item.data.data.encTotal decimals=2}} - {{#if item.data.equipe}}{{else}}{{/if}} + {{#if item.data.data.equipe}}{{else}}{{/if}} diff --git a/templates/actor-vehicule-sheet.html b/templates/actor-vehicule-sheet.html index 703a9a8c..9f296b42 100644 --- a/templates/actor-vehicule-sheet.html +++ b/templates/actor-vehicule-sheet.html @@ -84,14 +84,14 @@
  • {{#each data.objets as |item id|}} {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} + {{#if (ne item.data.type 'conteneur')}}
  • {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} + {{item.data.data.quantite}} + {{numberFormat item.data.data.encTotal decimals=2}} diff --git a/templates/chat-actor-carac-xp.html b/templates/chat-actor-carac-xp.html index fd3ffd3e..c7502b33 100644 --- a/templates/chat-actor-carac-xp.html +++ b/templates/chat-actor-carac-xp.html @@ -1,4 +1,7 @@ -

    La caractéristique {{carac}} de {{alias}} peut progresser !

    +{{#if actor.img}} + {{actor.name}} +{{/if}} +

    La caractéristique {{carac}} de {{actor.name}} peut progresser !

    Son experience dans cette caractéristique est actuellement de {{xp}}
    Vous devez ouvrir votre fiche de personnage et appliquer (ou pas) l'augmentation manuellement.
    diff --git a/templates/chat-actor-competence-xp.html b/templates/chat-actor-competence-xp.html index 5b750829..97dc16de 100644 --- a/templates/chat-actor-competence-xp.html +++ b/templates/chat-actor-competence-xp.html @@ -1,5 +1,8 @@ {{log "handlebar" this}} -

    {{alias}} peut progresser dans sa compétence {{competence}} !

    +{{#if actor.img}} + {{actor.name}} +{{/if}} +

    {{actor.name}} peut progresser dans sa compétence {{competence}} !

    Son niveau en {{competence}} peut évoluer à {{niveau}} pour un archétype de {{archetype}} !
    Son experience dans cette compétence est de {{xp}}.
    Vous devez ouvrir votre fiche de personnage et appliquer (ou pas) l'augmentation manuellement.
    diff --git a/templates/chat-actor-turn-summary.html b/templates/chat-actor-turn-summary.html index 202c75d7..13c3acc5 100644 --- a/templates/chat-actor-turn-summary.html +++ b/templates/chat-actor-turn-summary.html @@ -1,10 +1,13 @@ {{log "handlebar" this}} -

    C'est au tour de {{alias}} !

    +{{#if actor.img}} + {{actor.name}} +{{/if}} +

    C'est au tour de {{actor.name}} !

    {{blessuresStatus}}
    Son état général est de : {{etatGeneral}} {{#if isSonne}} et est sonné{{/if}}
    {{#if isGrave}} -
    {{alias}} souffre de Blessure(s) Grave(s) : n'oubliez pas de faire un Je de Vie toutes les SC ({{SConst}}) minutes.
    +
    {{actor.name}} souffre de Blessure(s) Grave(s) : n'oubliez pas de faire un Je de Vie toutes les SC ({{SConst}}) minutes.
    {{/if}} {{#if isCritique}} -
    {{alias}} souffre d'une Blessure Critique : faites un Jet de Vie.
    +
    {{actor.name}} souffre d'une Blessure Critique : faites un Jet de Vie.
    {{/if}} \ No newline at end of file diff --git a/templates/chat-demande-attaque-etotal.html b/templates/chat-demande-attaque-etotal.html index 7eb475b8..6d117741 100644 --- a/templates/chat-demande-attaque-etotal.html +++ b/templates/chat-demande-attaque-etotal.html @@ -5,19 +5,20 @@ {{#if (eq attacker.data.type 'personnage')}} {{#unless essais.attaqueChance}} Faire appel à la chance + data-defenderTokenId='{{defenderTokenId}}'>Faire appel à la chance
    {{/unless}} {{#if (gt attacker.data.data.compteurs.destinee.value 0)}} Utiliser la destinée + data-defenderTokenId='{{defenderTokenId}}'> + Utiliser la destinée
    {{/if}} {{/if}} - Tirer l'échec total ! + Tirer la maladresse !
  • \ No newline at end of file diff --git a/templates/chat-demande-attaque-particuliere.html b/templates/chat-demande-attaque-particuliere.html index 44cb0b19..06273d7f 100644 --- a/templates/chat-demande-attaque-particuliere.html +++ b/templates/chat-demande-attaque-particuliere.html @@ -1,6 +1,6 @@ {{log "handlebar" this}}
    -

    {{alias}} réussit une attaque particulière!

    +

    {{actor.name}} réussit une attaque particulière!


    Attaquer en Force diff --git a/templates/chat-demande-defense.html b/templates/chat-demande-defense.html index 4193a61e..814967e0 100644 --- a/templates/chat-demande-defense.html +++ b/templates/chat-demande-defense.html @@ -22,14 +22,16 @@ {{#unless essais.defenseChance}} {{#if (eq defender.data.type 'personnage')}} Faire appel à la chance + data-defenderTokenId='{{defenderTokenId}}'> + Faire appel à la chance
    {{/if}} {{#if (eq defender.data.type 'personnage')}} {{#if (gt defender.data.data.compteurs.destinee.value 0)}} Utiliser la destinée + data-defenderTokenId='{{defenderTokenId}}'> + Utiliser la destinée
    {{/if}} diff --git a/templates/chat-info-appel-au-moral.html b/templates/chat-info-appel-au-moral.html index e58a9b0a..9ce15624 100644 --- a/templates/chat-info-appel-au-moral.html +++ b/templates/chat-info-appel-au-moral.html @@ -1,4 +1,4 @@ {{#if use.appelAuMoral}}
    - {{alias}} utilise {{#if (gt moral 0)}}le moral{{else}} l'énergie du déspoir{{/if}} et {{#if moralDiminuer}}échoue, diminuant son moral.{{else}}réussit.{{/if}} + {{actor.name}} utilise {{#if (gt moral 0)}}le moral{{else}} l'énergie du déspoir{{/if}} et {{#if moralDiminuer}}échoue, diminuant son moral.{{else}}réussit.{{/if}} {{^jetEchouerMoralDiminuer}} Son moral reste inchangé à {{moral}}.{{/jetEchouerMoralDiminuer}}
    {{/if}} diff --git a/templates/chat-initiative-premier-round.html b/templates/chat-initiative-premier-round.html index 5aac3c6b..d8e14394 100644 --- a/templates/chat-initiative-premier-round.html +++ b/templates/chat-initiative-premier-round.html @@ -1,5 +1,5 @@ {{log "handlebar" this}} -

    L'initiative de {{alias}} a été modifiée !

    +

    L'initiative de {{actor.name}} a été modifiée !


    Etant donné son {{armeName}}, son initative pour ce premier round est désormais de {{initValue}}. diff --git a/templates/chat-rencontre-tmr.html b/templates/chat-rencontre-tmr.html index ecf43016..91a677e6 100644 --- a/templates/chat-rencontre-tmr.html +++ b/templates/chat-rencontre-tmr.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} rencontre {{#if (eq genre 'f')}}une{{else}}un{{/if}} {{rencontre.name}} de force {{rencontre.force}} + {{actor.name}} rencontre {{#if (eq genre 'f')}}une{{else}}un{{/if}} {{rencontre.name}} de force {{rencontre.force}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    diff --git a/templates/chat-resultat-accorder-cauchemar.html b/templates/chat-resultat-accorder-cauchemar.html index b6f41b5a..7b3efdae 100644 --- a/templates/chat-resultat-accorder-cauchemar.html +++ b/templates/chat-resultat-accorder-cauchemar.html @@ -1,11 +1,14 @@ {{log "handlebar" this}} +{{#if actor.img}} + {{actor.name}} +{{/if}}

    - {{alias}} s'accorde: {{entite}} + {{actor.name}} s'accorde: {{entite}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} s'est accordé à {{entite}} - {{else}}ne s'est pas accordé à {{entite}}, il pourra réessayer à sa prochaine attaque. + {{actor.name}} s'est accordé à {{entite}} + {{else}}ne s'est pas accordé à {{entite}}, et pourra réessayer à sa prochaine attaque. {{/if}}
    diff --git a/templates/chat-resultat-alchimie.html b/templates/chat-resultat-alchimie.html index 1485c5f6..d55fd152 100644 --- a/templates/chat-resultat-alchimie.html +++ b/templates/chat-resultat-alchimie.html @@ -1,14 +1,14 @@ {{log "handlebar" this}} préparation alchimique

    - {{alias}} essaye de réaliser sa recette Alchimique : {{recette.name}} + {{actor.name}} essaye de réaliser sa recette Alchimique : {{recette.name}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} a réussi son opération alchimique ! Il/Elle peut passer à l'étape suivante de sa recette. + {{actor.name}} a réussi son opération alchimique ! Il/Elle peut passer à l'étape suivante de sa recette. {{else}} - {{alias}} a raté son opération alchimique ! Sa recette est un echec. + {{actor.name}} a raté son opération alchimique ! Sa recette est un echec. {{/if}}
    diff --git a/templates/chat-resultat-appelchance.html b/templates/chat-resultat-appelchance.html index 59d6ab6d..dbbf1bd8 100644 --- a/templates/chat-resultat-appelchance.html +++ b/templates/chat-resultat-appelchance.html @@ -1,7 +1,8 @@ {{log "handlebar" this}} -

    - {{alias}} fait appel à la chance -

    +{{#if actor.img}} + {{actor.name}} +{{/if}} +

    {{actor.name}} fait appel à la chance

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} {{~#if rolled.isSuccess}}
    diff --git a/templates/chat-resultat-attaque.html b/templates/chat-resultat-attaque.html index ab60c410..c3c5b28d 100644 --- a/templates/chat-resultat-attaque.html +++ b/templates/chat-resultat-attaque.html @@ -1,6 +1,6 @@ {{log "handlebar" this}} {{competence.name}} -

    {{alias}} attaque à {{diffLibre}}: {{arme.name}}

    +

    {{actor.name}} attaque à {{diffLibre}}: {{arme.name}}

    {{selectedCarac.label}}{{#unless (eq selectedCarac.label competence.name)}} / {{competence.name}}{{/unless}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    diff --git a/templates/chat-resultat-chant.html b/templates/chat-resultat-chant.html index f40d972f..d9c6eca7 100644 --- a/templates/chat-resultat-chant.html +++ b/templates/chat-resultat-chant.html @@ -1,15 +1,15 @@ {{log "handlebar" this}} {{oeuvre.data.competence}}

    - {{alias}} tente de chanter la chanson : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) + {{actor.name}} tente de chanter la chanson : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}})

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} réussi son interprétation avec une qualité de {{qualiteFinale}} . + {{actor.name}} réussit son interprétation avec une qualité de {{qualiteFinale}} . {{else}} - {{alias}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. + {{actor.name}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-poesie.html" oeuvre.data}} diff --git a/templates/chat-resultat-competence.html b/templates/chat-resultat-competence.html index b9d23e4b..1ffd3db5 100644 --- a/templates/chat-resultat-competence.html +++ b/templates/chat-resultat-competence.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} {{show.title}}: + {{actor.name}} {{show.title}}: {{#if selectedCarac}}{{selectedCarac.label}} {{#if competence}} {{#unless (eq selectedCarac.label competence.name)}} / {{competence.name}}{{/unless}} diff --git a/templates/chat-resultat-danse.html b/templates/chat-resultat-danse.html index 56df83f1..9c403b59 100644 --- a/templates/chat-resultat-danse.html +++ b/templates/chat-resultat-danse.html @@ -1,15 +1,15 @@ {{log "handlebar" this}} {{oeuvre.data.competence}}

    - {{alias}} tente de danser : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) + {{actor.name}} tente de danser : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}})

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} réussi son interprétation avec une qualité de {{qualiteFinale}} . + {{actor.name}} réussit son interprétation avec une qualité de {{qualiteFinale}} . {{else}} - {{alias}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. + {{actor.name}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-poesie.html" oeuvre.data}} diff --git a/templates/chat-resultat-encaissement.html b/templates/chat-resultat-encaissement.html index c9f07305..1597f816 100644 --- a/templates/chat-resultat-encaissement.html +++ b/templates/chat-resultat-encaissement.html @@ -2,12 +2,13 @@ {{#if isGM}} {{#if (gt endurance 0)}} - De plus, {{alias}} a perdu {{endurance}} points d'endurance + {{actor.name}} a perdu {{endurance}} points d'endurance {{#if (ne vie 0)}}et {{vie}} points de vie{{/if}} {{/if}} {{else}} -

    {{alias}} encaisse à +{{actor.name}} +

    {{actor.name}} encaisse à {{numberFormat dmg.total decimals=0 sign=true}} {{#if (eq dmg.mortalite 'non-mortel')~}}(coups non mortels) @@ -16,13 +17,13 @@

    - Je d'encaissement de {{roll.total}} - {{#unless (eq armure 0)}}, l'armure a protègé de {{armure}} {{#unless (eq penetration 0)}}(pénétration de {{penetration}}) + Jet d'encaissement de {{roll.total}} + {{#unless (eq armure 0)}}, l'armure a protégé de {{armure}} {{#unless (eq penetration 0)}}(pénétration de {{penetration}}) {{/unless}} {{/unless}}, total: {{total}}
    - {{alias}} - {{#if (eq dmg.mortalite 'cauchemar')}}subit le coup + {{actor.name}} + {{#if (eq dmg.mortalite 'cauchemar')}}subit une contusion {{else if eraflures}}subit une contusion {{else if legeres}}subit une blessure légère {{else if graves}}subit une blessure grave @@ -42,9 +43,9 @@ {{/if}} {{/if}} {{/if}} - {{#if (eq show.recul 'encaisse')}}
    {{alias}} ne recule pas malgré la violence du coup.
    - {{else if (eq show.recul 'chute')}}
    Sous la violence du coup, {{alias}} recule et chute au sol ! Il/elle ne pourra plus attaquer ce round.
    - {{else if (eq show.recul 'recul')}}
    La violence du coup fait reculer {{alias}} de quelques mètres ! Il/elle ne pourra plus attaquer ce round.
    + {{#if (eq show.recul 'encaisse')}}
    {{actor.name}} ne recule pas malgré la violence du coup.
    + {{else if (eq show.recul 'chute')}}
    Sous la violence du coup, {{actor.name}} recule et chute au sol ! Il/elle ne pourra plus attaquer ce round.
    + {{else if (eq show.recul 'recul')}}
    La violence du coup fait reculer {{actor.name}} de quelques mètres ! Il/elle ne pourra plus attaquer ce round.
    {{/if}}
    {{/if}} \ No newline at end of file diff --git a/templates/chat-resultat-esquive.html b/templates/chat-resultat-esquive.html index 1f49291e..e98e702c 100644 --- a/templates/chat-resultat-esquive.html +++ b/templates/chat-resultat-esquive.html @@ -1,6 +1,6 @@ {{log "handlebar" this}} {{competence.name}} -

    {{alias}} esquive une attaque à {{diffLibre}}

    +

    {{actor.name}} esquive une attaque à {{diffLibre}}

    {{selectedCarac.label}}{{#unless (eq selectedCarac.label competence.name)}} / {{competence.name}}{{/unless}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    diff --git a/templates/chat-resultat-ethylisme.html b/templates/chat-resultat-ethylisme.html index a1bc83df..1020b221 100644 --- a/templates/chat-resultat-ethylisme.html +++ b/templates/chat-resultat-ethylisme.html @@ -1,6 +1,9 @@ {{log "handlebar" this}} +{{#if actor.img}} + {{actor.name}} +{{/if}}

    - {{alias}} {{#if isSortReserve}}met en réserve{{else}}lance{{/if}} + {{actor.name}} {{#if isSortReserve}}met en réserve{{else}}lance{{/if}} le {{#if selectedSort.data.isrituel}}rituel{{else}}sort{{/if}} {{selectedSort.name}}

    diff --git a/templates/chat-resultat-general.html b/templates/chat-resultat-general.html index 087e22f7..f4f1fcbd 100644 --- a/templates/chat-resultat-general.html +++ b/templates/chat-resultat-general.html @@ -1,9 +1,11 @@ {{log "handlebar" this}} {{#if competence.img}} {{competence.name}} +{{else if actor.img}} + {{actor.name}} {{/if}}

    - {{alias}} {{#if show.title}}{{show.title}}: {{/if}} + {{actor.name}} {{#if show.title}}{{show.title}}: {{/if}} {{#if selectedCarac}}{{selectedCarac.label}} {{#if competence}}{{#unless (eq selectedCarac.label competence.name)}} / {{competence.name}}{{/unless}}{{/if}} à {{diffLibre}} diff --git a/templates/chat-resultat-jeu.html b/templates/chat-resultat-jeu.html index 0445c1dd..4aa86937 100644 --- a/templates/chat-resultat-jeu.html +++ b/templates/chat-resultat-jeu.html @@ -1,15 +1,15 @@ {{log "handlebar" this}} {{oeuvre.data.competence}}

    - {{alias}} joue à : {{oeuvre.name}} + {{actor.name}} joue à : {{oeuvre.name}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} a gagné la partie ! + {{actor.name}} a gagné la partie ! {{else}} - {{alias}} a perdu ... + {{actor.name}} a perdu ... {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-poesie.html" oeuvre.data}} diff --git a/templates/chat-resultat-maitrise-tmr.html b/templates/chat-resultat-maitrise-tmr.html index efe33817..1199bc18 100644 --- a/templates/chat-resultat-maitrise-tmr.html +++ b/templates/chat-resultat-maitrise-tmr.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} tente de {{maitrise.verbe}} {{le tmr.genre}} {{tmr.label}} ({{tmr.coord}}) + {{actor.name}} tente de {{maitrise.verbe}} {{le tmr.genre}} {{tmr.label}} ({{tmr.coord}})

    {{#if previous}} {{#with previous}} diff --git a/templates/chat-resultat-meditation.html b/templates/chat-resultat-meditation.html index 0515e381..b372234e 100644 --- a/templates/chat-resultat-meditation.html +++ b/templates/chat-resultat-meditation.html @@ -1,16 +1,16 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} a médité : {{meditation.name}} + {{actor.name}} a médité : {{meditation.name}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} aperçoit un signe Draconique fugitif, qu'il faut aller lire en {{meditation.data.tmr}} en réussissant un test d'INTELLECT/Draconic à {{diffLecture}}. + {{actor.name}} aperçoit un signe Draconique fugitif, qu'il faut aller lire en {{meditation.data.tmr}} en réussissant un test d'INTELLECT/Draconic à {{diffLecture}}. Selon le résultat de votre lecture, vous gagnerez les points suivants en Sort: 3 pour une Normale, 5 pour une Significative, 10 pour une Particulière. {{else}} - {{alias}} a échoué dans sa méditation et ne voit aucun signe Draconique. + {{actor.name}} a échoué dans sa méditation et ne voit aucun signe Draconique. {{/if}}
    Vous vous êtes fatigué de 2 cases. {{#if rolled.isETotal}}
    Votre échec total augmente de 1 la difficulté de la méditation!{{/if~}} diff --git a/templates/chat-resultat-musique.html b/templates/chat-resultat-musique.html index 17b62d63..b4f55c64 100644 --- a/templates/chat-resultat-musique.html +++ b/templates/chat-resultat-musique.html @@ -1,15 +1,15 @@ {{log "handlebar" this}} {{oeuvre.data.competence}}

    - {{alias}} tente de jouer le morceau : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) + {{actor.name}} tente de jouer le morceau : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}})

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} réussit son interprétation avec une qualité de {{qualiteFinale}} . + {{actor.name}} réussit son interprétation avec une qualité de {{qualiteFinale}} . {{else}} - {{alias}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. + {{actor.name}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-poesie.html" oeuvre.data}} diff --git a/templates/chat-resultat-oeuvre.html b/templates/chat-resultat-oeuvre.html index 11145969..2b05bd56 100644 --- a/templates/chat-resultat-oeuvre.html +++ b/templates/chat-resultat-oeuvre.html @@ -1,16 +1,16 @@ {{log "handlebar" this}} -

    {{oeuvre.data.competence}} - - {{alias}} tente d'interpréter {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) +{{oeuvre.data.competence}} +

    + {{actor.name}} tente d'interpréter {{oeuvre.name}} (niveau {{oeuvre.data.niveau}})


    {{upperFirst oeuvre.data.default_carac}} / {{oeuvre.data.competence}} {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} réussi son interprétation avec une qualité de {{qualiteFinale}} . + {{actor.name}} réussi son interprétation avec une qualité de {{qualiteFinale}} . {{else}} - {{alias}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. + {{actor.name}} est peu inspiré(e) et son interprétation a une qualité de {{qualiteFinale}}. {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-poesie.html" oeuvre.data}} diff --git a/templates/chat-resultat-parade.html b/templates/chat-resultat-parade.html index f2d4ec7b..4f838955 100644 --- a/templates/chat-resultat-parade.html +++ b/templates/chat-resultat-parade.html @@ -1,6 +1,6 @@ {{log "handlebar" this}} {{competence.name}} -

    {{alias}} pare une attaque à {{diffLibre}} - {{arme.name}}

    +

    {{actor.name}} pare une attaque à {{diffLibre}} - {{arme.name}}

    {{selectedCarac.label}}{{#unless (eq selectedCarac.label competence.name)}} / {{competence.name}}{{/unless}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    @@ -8,16 +8,16 @@ {{#if rolled.isSuccess}} Attaque parée! - {{#if rolled.isPart}}{{alias}} pourra tenter une deuxième parade!{{/if}} + {{#if rolled.isPart}}{{actor.name}} pourra tenter une deuxième parade!{{/if}} {{else}} La parade a échoué! {{/if}}
    -{{#if (eq show.recul 'encaisse')}}
    {{alias}} ne recule pas malgré la violence du coup.
    -{{else if (eq show.recul 'chute')}}
    Sous la violence du coup, {{alias}} recule et chute au sol ! Il/elle ne pourra plus attaquer ce round.
    -{{else if (eq show.recul 'recul')}}
    La violence du coup fait reculer {{alias}} de quelques mètres ! Il/elle ne pourra plus attaquer ce round.
    +{{#if (eq show.recul 'encaisse')}}
    {{actor.name}} ne recule pas malgré la violence du coup.
    +{{else if (eq show.recul 'chute')}}
    Sous la violence du coup, {{actor.name}} recule et chute au sol ! Il/elle ne pourra plus attaquer ce round.
    +{{else if (eq show.recul 'recul')}}
    La violence du coup fait reculer {{actor.name}} de quelques mètres ! Il/elle ne pourra plus attaquer ce round.
    {{/if}} {{#if (eq show.deteriorationArme 'resiste')}} @@ -29,7 +29,7 @@ {{/if}} {{#if show.desarme}} -
    Le défenseur {{alias}} lâche son arme qui tombe à ses pieds.
    +
    Le défenseur {{actor.name}} lâche son arme qui tombe à ses pieds.
    {{/if}} {{#if attackerRoll.tactique}} diff --git a/templates/chat-resultat-recettecuisine.html b/templates/chat-resultat-recettecuisine.html index 28628c1f..7f023005 100644 --- a/templates/chat-resultat-recettecuisine.html +++ b/templates/chat-resultat-recettecuisine.html @@ -1,15 +1,15 @@ {{log "handlebar" this}} {{oeuvre.data.competence}}

    - {{alias}} tente de cuisiner la recette : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) + {{actor.name}} tente de cuisiner la recette : {{oeuvre.name}} (niveau {{oeuvre.data.niveau}})

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    {{#if rolled.isSuccess}} - {{alias}} réussit sa recette, avec un plat de qualité {{qualiteFinale}} pour {{oeuvre.data.sust}} Points de Sustentation. + {{actor.name}} réussit sa recette, avec un plat de qualité {{qualiteFinale}} pour {{oeuvre.data.sust}} Points de Sustentation. {{else}} - {{alias}} fait un piètre cuisinier(e), et obtient {{#if (lt qualiteFinale 0)}}un plat à l'exotisme certain{{else}}un plat de qualité {{qualiteFinale}}{{/if}}. + {{actor.name}} fait un piètre cuisinier(e), et obtient {{#if (lt qualiteFinale 0)}}un plat à l'exotisme certain{{else}}un plat de qualité {{qualiteFinale}}{{/if}}. Selon la décision du MJ, le plat peut fournir {{oeuvre.data.sust}} Points de Sustentation {{/if}} diff --git a/templates/chat-resultat-reve-de-dragon.html b/templates/chat-resultat-reve-de-dragon.html index 4f8e2a2f..ec9142f1 100644 --- a/templates/chat-resultat-reve-de-dragon.html +++ b/templates/chat-resultat-reve-de-dragon.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} Rêve de Dragon

    - {{alias}} tente de maîtriser un Rêve de Dragon! + {{actor.name}} tente de maîtriser un Rêve de Dragon!

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
    diff --git a/templates/chat-resultat-sort.html b/templates/chat-resultat-sort.html index 0ae4e437..5f4d9bb1 100644 --- a/templates/chat-resultat-sort.html +++ b/templates/chat-resultat-sort.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} {{#if isSortReserve}}met en réserve{{else}}lance{{/if}} + {{actor.name}} {{#if isSortReserve}}met en réserve{{else}}lance{{/if}} le {{#if selectedSort.data.isrituel}}rituel{{else}}sort{{/if}} {{selectedSort.name}}

    diff --git a/templates/chat-resultat-tache.html b/templates/chat-resultat-tache.html index 3fdb76a9..89de0467 100644 --- a/templates/chat-resultat-tache.html +++ b/templates/chat-resultat-tache.html @@ -1,7 +1,7 @@ {{log "handlebar" this}} {{competence.name}}

    - {{alias}} travaille à sa tâche {{tache.name}} + {{actor.name}} travaille à sa tâche {{tache.name}}
    {{selectedCarac.label}}/{{competence.name}}

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} diff --git a/templates/chat-resultat-transformer-stress.html b/templates/chat-resultat-transformer-stress.html index 0cd037fa..b37fbed2 100644 --- a/templates/chat-resultat-transformer-stress.html +++ b/templates/chat-resultat-transformer-stress.html @@ -1,6 +1,9 @@ {{log "handlebar" this}} +{{#if actor.img}} + {{actor.name}} +{{/if}}

    - {{alias}} transforme {{rolled.factor}}% de son stress + {{actor.name}} transforme {{rolled.factor}}% de son stress

    {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} {{#if rolled.isPart}} diff --git a/templates/dialog-astrologie-joueur.html b/templates/dialog-astrologie-joueur.html index f2f629be..31663100 100644 --- a/templates/dialog-astrologie-joueur.html +++ b/templates/dialog-astrologie-joueur.html @@ -23,7 +23,7 @@ {{/select}} - + {{!-- Sheet Body --}}
    diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html index b2046a19..cd417ed0 100644 --- a/templates/item-arme-sheet.html +++ b/templates/item-arme-sheet.html @@ -12,7 +12,7 @@
    diff --git a/templates/item-casetmr-sheet.html b/templates/item-casetmr-sheet.html index d83349fd..a0c52d0c 100644 --- a/templates/item-casetmr-sheet.html +++ b/templates/item-casetmr-sheet.html @@ -16,7 +16,7 @@
    diff --git a/templates/item-competence-sheet.html b/templates/item-competence-sheet.html index fdedcc11..d8848dee 100644 --- a/templates/item-competence-sheet.html +++ b/templates/item-competence-sheet.html @@ -18,7 +18,7 @@
    @@ -34,7 +34,7 @@
    @@ -42,7 +42,7 @@
    diff --git a/templates/item-danse-sheet.html b/templates/item-danse-sheet.html index a454d82f..6ff0a904 100644 --- a/templates/item-danse-sheet.html +++ b/templates/item-danse-sheet.html @@ -12,7 +12,7 @@
    - {{#select item.data.data.type}} + {{#select item.data.data.data.type}} diff --git a/templates/item-livre-sheet.html b/templates/item-livre-sheet.html index cb2936d4..d671c4df 100644 --- a/templates/item-livre-sheet.html +++ b/templates/item-livre-sheet.html @@ -16,7 +16,7 @@
    - {{#select item.data.data.competence}} + {{#select item.data.data.data.competence}} {{#each competences as |competence key|}} {{/each}} @@ -30,7 +30,7 @@
    @@ -50,7 +50,7 @@
    @@ -59,7 +59,7 @@ {{#if isGM}} - {{#select item.data.data.default_carac}} + {{#select item.data.data.data.default_carac}} {{>"systems/foundryvtt-reve-de-dragon/templates/competence-carac-defaut.html"}} {{/select}} @@ -20,7 +20,7 @@
    - {{#select item.data.data.draconic}} + {{#select item.data.data.data.draconic}} {{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}} {{/select}} @@ -20,7 +20,7 @@
    - {{#select item.data.data.carac}} + {{#select item.data.data.data.carac}} {{#each caracList as |carac key|}} {{/each}} @@ -22,7 +22,7 @@