diff --git a/dev-notes.md b/dev-notes.md new file mode 100644 index 00000000..6dd99c00 --- /dev/null +++ b/dev-notes.md @@ -0,0 +1,48 @@ +# Actor notes + +> The Actor#getData default implementation gives you the following for use in sheet rendering: + +``` + actor -> the Actor instance + data -> a cloned copy of Actor#data + items -> a cloned copy of Actor#data#items + effects -> a cloned copy of Actor#data#effects +``` + +> if all you need is a safe copy of `Actor#data`, you'll be much better off by simply defining your own function and avoiding all the wasted work that the parent class does which will slow down your sheet +```js +getData(options) { + return { + data: foundry.utils.deepClone(this.object.data) + } +} +``` + +who knows, maybe you don't even need to copy your actor data, skip the copy and it's even faster: +```js +getData(options) { + return { + data: this.object.data + } +} +``` + + +Atropos19/02/2021 +There are two recommended ways to create owned items in 0.8.0: +```js +await Item.create(itemData, {parent: actor}); +await actor.createEmbeddedDocuments("Item", itemDataArray); +``` + + +You can update an embedded item in one of two ways: +```js +//Method 1: + +const item = actor.items.get(itemId); +item.update(data); + +//Method 2: +actor.updateEmbeddedDocuments("Item", [{_id: itemId, ...}]); +``` \ No newline at end of file diff --git a/module/actor-creature-sheet.js b/module/actor-creature-sheet.js index b9a820d7..90e7b516 100644 --- a/module/actor-creature-sheet.js +++ b/module/actor-creature-sheet.js @@ -7,6 +7,8 @@ import { HtmlUtility } from "./html-utility.js"; import { RdDUtility } from "./rdd-utility.js"; import { RdDActorSheet } from "./actor-sheet.js"; +import { Misc } from "./misc.js"; +import { RdDCarac } from "./rdd-carac.js"; /* -------------------------------------------- */ export class RdDActorCreatureSheet extends RdDActorSheet { @@ -25,41 +27,20 @@ export class RdDActorCreatureSheet extends RdDActorSheet { /* -------------------------------------------- */ - getData() { - let data = super.getData(); - console.log("Creature : ", data); - - data.itemsByType = {}; - for (const item of data.items) { - let list = data.itemsByType[item.type]; - if (!list) { - list = []; - data.itemsByType[item.type] = list; - } - list.push(item); + async getData() { + let sheetData = await super.getData(); + console.log("Creature : ", sheetData); + sheetData.calc = { + caracTotal: RdDCarac.computeTotal(sheetData.data.data.carac), + resumeBlessures: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures), } - // Compute current carac sum - let sum = 0; - Object.values(data.data.carac).forEach(carac => { if (!carac.derivee) { sum += parseInt(carac.value) } }); - data.data.caracSum = sum; - - data.data.carac.taille.isTaille = true; // To avoid button link; - data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.blessures); - - data.data.isGM = game.user.isGM; - - data.data.competencecreature = data.itemsByType["competencecreature"]; - this.actor.computeEncombrementTotalEtMalusArmure(); - RdDUtility.filterItemsPerTypeForSheet(data); - RdDUtility.buildArbreDeConteneur(this, data); - data.data.encTotal = this.actor.encTotal; - data.data.isGM = game.user.isGM; + RdDUtility.buildArbreDeConteneur(this, sheetData); - console.log("Creature : ", this.objetVersConteneur, data); + console.log("Creature : ", this.objetVersConteneur, sheetData); - return data; + return sheetData; } /* -------------------------------------------- */ @@ -100,7 +81,7 @@ export class RdDActorCreatureSheet extends RdDActorSheet { /* -------------------------------------------- */ /** @override */ - _updateObject(event, formData) { + async _updateObject(event, formData) { // Update the Actor return this.object.update(formData); } diff --git a/module/actor-entite-sheet.js b/module/actor-entite-sheet.js index 8e9f3c93..b4689b4d 100644 --- a/module/actor-entite-sheet.js +++ b/module/actor-entite-sheet.js @@ -20,33 +20,18 @@ export class RdDActorEntiteSheet extends ActorSheet { }); } - /* -------------------------------------------- */ - _checkNull(items) { - if (items && items.length) { - return items; - } - return []; - } - /* -------------------------------------------- */ getData() { - let data = super.getData(); + let sheetData = super.getData(); + sheetData.items = Misc.classify(sheetData.items); - data.itemsByType = {}; - for (const item of data.items) { - let list = data.itemsByType[item.type]; - if (!list) { - list = []; - data.itemsByType[item.type] = list; - } - list.push(item); - } - - data.data.carac.taille.isTaille = true; // To avoid button link; - data.data.competencecreature = data.itemsByType["competencecreature"]; - data.data.isGM = game.user.isGM; + sheetData.data.competencecreature = sheetData.itemsByType["competencecreature"]; - return data; + data.options = { + isGM: game.user.isGM + }; + + return sheetData; } /* -------------------------------------------- */ @@ -62,14 +47,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)); }); @@ -99,16 +84,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(); }); @@ -135,7 +120,7 @@ export class RdDActorEntiteSheet extends ActorSheet { /* -------------------------------------------- */ /** @override */ - _updateObject(event, formData) { + async _updateObject(event, formData) { // Update the Actor return this.object.update(formData); } diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 19837d4e..2cef6bc8 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -10,6 +10,7 @@ import { RdDItemCompetence } from "./item-competence.js"; import { RdDBonus } from "./rdd-bonus.js"; import { Misc } from "./misc.js"; import { RdDCombatManager } from "./rdd-combat.js"; +import { RdDCarac } from "./rdd-carac.js"; /* -------------------------------------------- */ export class RdDActorSheet extends ActorSheet { @@ -31,141 +32,111 @@ export class RdDActorSheet extends ActorSheet { } /* -------------------------------------------- */ - getData() { - let data = super.getData(); - if ( data.actor.type == 'creature' || data.actor.type == 'humanoide') return data; // Shortcut + async getData() { + // Partie commune + let sheetData = await super.getData(); - data.data.editCaracComp = this.options.editCaracComp; - data.data.showCompNiveauBase = this.options.showCompNiveauBase; - data.data.montrerArchetype = this.options.montrerArchetype; + sheetData.items = Misc.classify(sheetData.items); + RdDUtility.filterItemsPerTypeForSheet(sheetData); - data.itemsByType = Misc.classify(data.items); + sheetData.options.isGM = game.user.isGM; + sheetData.carac = sheetData.data.data.carac + // la taille est la taille: on ne peut pas l'utiliser pour un jet + sheetData.carac.taille.isTaille = true; - // Competence per category - data.data.comptageArchetype = RdDUtility.getLimitesArchetypes(); - data.data.competenceXPTotal = 0; - data.competenceByCategory = Misc.classify( - data.itemsByType.competence, - item => item.data.categorie, - item => { - let archetypeKey = (item.data.niveau_archetype < 0) ? 0 : item.data.niveau_archetype; - if (data.data.comptageArchetype[archetypeKey] == undefined) { - data.data.comptageArchetype[archetypeKey] = { "niveau": archetypeKey, "nombreMax": 0, "nombre": 0}; - } - data.data.comptageArchetype[archetypeKey].nombre = (data.data.comptageArchetype[archetypeKey]?.nombre??0) + 1; //Comptage archetype - item.data.xpNext = RdDItemCompetence.getCompetenceNextXp(item.data.niveau); - item.data.isLevelUp = item.data.xp >= item.data.xpNext; // Flag de niveau à MAJ - //this.actor.checkCompetenceXP(item.name); // Petite vérification experience - item.data.showCompetence = !data.data.showCompNiveauBase || (Number(item.data.niveau) != Number(RdDUtility.getLevelCategory(item.data.categorie))); - // Ignorer les compétences 'troncs' à ce stade - data.data.competenceXPTotal += RdDItemCompetence.computeCompetenceXPCost(item); - return item; - }); - data.data.competenceXPTotal -= RdDItemCompetence.computeEconomieCompetenceTroncXP(data.itemsByType.competence); + sheetData.competences = (sheetData.items.competence??[]).concat(sheetData.items.competencecreature??[]); - // Compute current carac sum - let sum = 0; - for (let caracName in data.data.carac) { - let currentCarac = data.data.carac[caracName]; - if (!currentCarac.derivee) { - sum += parseInt(currentCarac.value); - } - currentCarac.xpNext = RdDUtility.getCaracNextXp(currentCarac.value); - currentCarac.isLevelUp = (currentCarac.xp >= currentCarac.xpNext); - } - sum += (data.data.beaute >= 0) ? (data.data.beaute - 10) : 0; - data.data.caracSum = sum; + if (sheetData.actor.type == 'creature') return sheetData; // Shortcut - // Force empty arme, at least for Esquive - if (data.itemsByType.arme == undefined) data.itemsByType.arme = []; - for (const arme of data.itemsByType.arme) { - arme.data.niveau = 0; // Per default, TODO to be fixed - for (const melee of data.competenceByCategory.melee) { - if (melee.name == arme.data.competence) - arme.data.niveau = melee.data.niveau - } - for (const tir of data.competenceByCategory.tir) { - if (tir.name == arme.data.competence) - arme.data.niveau = tir.data.niveau - } - for (const lancer of data.competenceByCategory.lancer) { - if (lancer.name == arme.data.competence) - arme.data.niveau = lancer.data.niveau - } + /* -- partie spécifique aux personnages -- */ + const competences = sheetData.competences; + // toujours avoir une liste d'armes (pour mettre esquive et corps à corps) + sheetData.items.arme = sheetData.items.arme ?? []; + sheetData.competenceByCategory = Misc.classify(competences, comp => comp.data.categorie); + + sheetData.calc = { + comptageArchetype: RdDItemCompetence.computeResumeArchetype(competences), + competenceXPTotal: RdDItemCompetence.computeTotalXP(competences), + caracTotal: RdDCarac.computeTotal(sheetData.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(), + surprise: RdDBonus.find(sheetData.actor.getSurprise(false)).descr, + surEncombrementMessage: (sheetData.data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "", + fatigue: { + malus: RdDUtility.calculMalusFatigue(sheetData.data.data.sante.fatigue.value, sheetData.data.data.sante.endurance.max), + html: "" + RdDUtility.makeHTMLfatigueMatrix(sheetData.data.data.sante.fatigue.value, sheetData.data.data.sante.endurance.max).html() + "
" + }, + resumeBlessures: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures), + }; + + competences.forEach(it => it.visible = this.isCompetenceAffichable(it)); + RdDItemCompetence.setLevelUp(competences); + RdDCarac.setLevelUp(sheetData.carac); + + sheetData.armes = duplicate(sheetData.items.arme); + RdDItemArme.computeNiveauArmes(sheetData.armes, competences); + RdDItemArme.ajoutCorpsACorps(sheetData.armes, competences, sheetData.carac); + sheetData.esquive = RdDItemCompetence.getEsquive(competences); + sheetData.armes = RdDCombatManager.finalizeArmeList(sheetData.armes, competences, sheetData.carac); + + sheetData.data.data.compteurs.chance.isChance = true; + + sheetData.tmr = { + sortsReserve: sheetData.data.data.reve.reserve.list, + rencontres: sheetData.data.data.reve.rencontre.list, + caseSpeciales: sheetData.items.casetmr } - // To avoid armour and so on... - data.data.combat = duplicate(RdDUtility.checkNull(data.itemsByType['arme'])); - data.data.combat = RdDCombatManager.finalizeArmeList(data.data.combat, data.itemsByType.competence, data.data.carac); + RdDUtility.buildArbreDeConteneur(this, sheetData); - data.esquive = { name: "Esquive", niveau: data.competenceByCategory?.melee.find(it => it.name == 'Esquive')?.data.niveau ?? -6}; - let corpsACorps = data.competenceByCategory?.melee.find(it => it.name == 'Corps à corps'); - if (corpsACorps) { - let cc_init = RdDCombatManager.calculInitiative(corpsACorps.data.niveau, data.data.carac['melee'].value); - data.data.combat.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: cc_init })); - } - this.armesList = duplicate(data.data.combat); - - data.data.carac.taille.isTaille = true; // To avoid button link; - data.data.compteurs.chance.isChance = true; - data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.blessures); - - // Mise à jour de l'encombrement total et du prix de l'équipement - this.actor.computeEncombrementTotalEtMalusArmure(); - this.actor.computePrixTotalEquipement(); - - // Common data - data.data.competenceByCategory = data.competenceByCategory; - data.data.encTotal = this.actor.encTotal; - data.data.prixTotalEquipement = this.actor.prixTotalEquipement; - data.data.surprise = RdDBonus.find(this.actor.getSurprise(false)).descr; - data.data.isGM = game.user.isGM; - data.ajustementsConditions = CONFIG.RDD.ajustementsConditions; - data.difficultesLibres = CONFIG.RDD.difficultesLibres; - - // low is normal, this the base used to compute the grid. - data.data.fatigue = { - malus: RdDUtility.calculMalusFatigue(data.data.sante.fatigue.value, data.data.sante.endurance.max), - html: "" + RdDUtility.makeHTMLfatigueMatrix(data.data.sante.fatigue.value, data.data.sante.endurance.max).html() + "
" + sheetData.subacteurs = { + vehiculesList: sheetData.actor.buildVehiculesList(), + montures: sheetData.actor.buildMonturesList(), + suivants: sheetData.actor.buildSuivantsList() } - RdDUtility.filterItemsPerTypeForSheet(data); - data.data.sortReserve = data.data.reve.reserve.list; - data.data.rencontres = duplicate(data.data.reve.rencontre.list); - data.data.caseSpeciales = data.itemsByType['casetmr']; - RdDUtility.buildArbreDeConteneur(this, data); - data.data.surEncombrementMessage = (data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : ""; - data.data.vehiculesList = this.actor.buildVehiculesList(); - data.data.monturesList = this.actor.buildMonturesList(); - data.data.suivantsList = this.actor.buildSuivantsList(); - return data; + // conserver la liste des armes + this.armesList = sheetData.armes; + return sheetData; + } + + computeNiveauArme(armes, competences) { + for (const arme of armes) { + const compArme = competences.find(it => it.name == arme.data.competence); + arme.data.niveau = compArme?.data.niveau ?? -8; + } + } + + isCompetenceAffichable(competence) { + return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence); } /* -------------------------------------------- */ async _onDrop(event) { let toSuper = await RdDUtility.processItemDropEvent(this, event); - if ( toSuper) { + if (toSuper) { super._onDrop(event); } } /* -------------------------------------------- */ async createEmptyTache() { - await this.actor.createOwnedItem({ name: 'Nouvelle tache', type: 'tache' }, { renderSheet: true }); + await this.object.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.object.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({ @@ -185,47 +156,59 @@ 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); }); + html.find('.show-hide-archetype').click((event) => { + this.options.montrerArchetype = !this.options.montrerArchetype; + this.render(true); + }); // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; + // Gestion du bouton lock/unlock + html.find('.lock-unlock-sheet').click((event) => { + this.options.editCaracComp = !this.options.editCaracComp; + this.render(true); + }); + + html.find('.item-edit').click(ev => { const li = $(ev.currentTarget).parents(".item"); - const item = this.actor.getOwnedItem(li.data("item-id")); + const item = this.object.items.get(li.data("item-id")); item.sheet.render(true); }); // Update Inventory Item html.find('.rencontre-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); const rencontreKey = li.data("item-id"); - this.actor.deleteTMRRencontre(rencontreKey); + this.object.deleteTMRRencontre(rencontreKey); }); // Delete Inventory Item html.find('.item-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); RdDUtility.confirmerSuppression(this, li); - }); + }); html.find('.subacteur-delete').click(ev => { const li = $(ev.currentTarget).parents(".item"); RdDUtility.confirmerSuppressionSubacteur(this, li); }); - - html.find('#encaisser-direct').click(ev => { - this.actor.encaisser(); + + html.find('.encaisser-direct').click(ev => { + this.object.encaisser(); }); html.find('.remise-a-neuf').click(ev => { if (game.user.isGM) { - this.actor.remiseANeuf(); + this.object.remiseANeuf(); ev.preventDefault(); } }); @@ -236,7 +219,7 @@ export class RdDActorSheet extends ActorSheet { this.selectObjetType(); }); html.find('#nettoyer-conteneurs').click(ev => { - this.actor.nettoyerConteneurs(); + this.object.nettoyerConteneurs(); }); // Blessure control @@ -246,7 +229,7 @@ export class RdDActorSheet extends ActorSheet { let index = li.data('blessure-index'); let active = $(ev.currentTarget).data('blessure-active'); //console.log(btype, index, active); - this.actor.manageBlessureFromSheet(btype, index, active).then(this.render(true)); + this.object.manageBlessureFromSheet(btype, index, active).then(this.render(true)); }); // Blessure data @@ -259,102 +242,101 @@ export class RdDActorSheet extends ActorSheet { let jours = li.find('input[name=jours]').val(); let loc = li.find('input[name=localisation]').val(); //console.log(btype, index, psoins, pcomplets, jours, loc); - this.actor.setDataBlessureFromSheet(btype, index, psoins, pcomplets, jours, loc).then(this.render(true)); + this.object.setDataBlessureFromSheet(btype, index, psoins, pcomplets, jours, loc).then(this.render(true)); }); // Equip Inventory Item html.find('.item-equip').click(ev => { const li = $(ev.currentTarget).parents(".item"); - this.actor.equiperObjet(li.data("item-id")); - this.render(true); + this.object.equiperObjet(li.data("item-id")); }); // Roll Carac html.find('.carac-label a').click((event) => { let caracName = event.currentTarget.attributes.name.value; - this.actor.rollCarac(caracName.toLowerCase()); + this.object.rollCarac(caracName.toLowerCase()); }); - html.find('#chance-actuelle').click((event) => { - this.actor.rollCarac('chance-actuelle'); + html.find('.chance-actuelle').click((event) => { + this.object.rollCarac('chance-actuelle'); }); - html.find('#chance-appel').click((event) => { - this.actor.rollAppelChance(); + html.find('.chance-appel').click((event) => { + this.object.rollAppelChance(); }); - html.find('#jet-astrologie').click((event) => { - this.actor.astrologieNombresAstraux(); + html.find('.jet-astrologie').click((event) => { + this.object.astrologieNombresAstraux(); }); // Roll Skill html.find('.competence-label a').click((event) => { let compName = event.currentTarget.text; - this.actor.rollCompetence(compName); + this.object.rollCompetence(compName); }); html.find('.tache-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let tacheId = li.data('item-id'); - this.actor.rollTache(tacheId); + this.object.rollTache(tacheId); }); html.find('.meditation-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let meditationId = li.data('item-id'); - this.actor.rollMeditation(meditationId); + this.object.rollMeditation(meditationId); }); html.find('.chant-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let chantId = li.data('item-id'); - this.actor.rollChant(chantId); + this.object.rollChant(chantId); }); html.find('.danse-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let danseId = li.data('item-id'); - this.actor.rollDanse(danseId); + this.object.rollDanse(danseId); }); html.find('.musique-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let musiqueId = li.data('item-id'); - this.actor.rollMusique(musiqueId); + this.object.rollMusique(musiqueId); }); html.find('.oeuvre-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let oeuvreId = li.data('item-id'); - this.actor.rollOeuvre(oeuvreId); + this.object.rollOeuvre(oeuvreId); }); html.find('.jeu-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let jeuId = li.data('item-id'); - this.actor.rollJeu(jeuId); + this.object.rollJeu(jeuId); }); html.find('.recettecuisine-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let recetteId = li.data('item-id'); - this.actor.rollRecetteCuisine(recetteId); + this.object.rollRecetteCuisine(recetteId); }); html.find('.subacteur-label a').click((event) => { const li = $(event.currentTarget).parents(".item"); let actorId = li.data('actor-id'); - let actor = game.actors.get( actorId) ; - if ( actor ) { + let actor = game.actors.get(actorId); + if (actor) { actor.sheet.render(true); } }); - + // Points de reve actuel html.find('.ptreve-actuel a').click((event) => { - this.actor.rollCarac('reve-actuel'); + this.object.rollCarac('reve-actuel'); }); // Roll Weapon1 html.find('.arme-label a').click((event) => { let armeName = event.currentTarget.text; let competenceName = event.currentTarget.attributes['data-competence-name'].value; - this.actor.rollArme(competenceName, armeName); + this.object.rollArme(competenceName, armeName); }); // Initiative pour l'arme html.find('.arme-initiative a').click((event) => { - let combatant = game.combat.data.combatants.find(c => c.actor.data._id == this.actor.data._id); + let combatant = game.combat.data.combatants.find(c => c.actor.data._id == this.object.data._id); if (combatant) { let armeName = event.currentTarget.attributes['data-arme-name'].value; let arme = this.armesList.find(a => a.name == armeName); @@ -364,45 +346,45 @@ export class RdDActorSheet extends ActorSheet { } }); // Display TMR, visuualisation - html.find('#visu-tmr').click((event) => { - this.actor.displayTMR("visu"); + html.find('.visu-tmr').click((event) => { + this.object.displayTMR("visu"); }); // Display TMR, normal - html.find('#monte-tmr').click((event) => { - this.actor.displayTMR("normal"); + html.find('.monte-tmr').click((event) => { + this.object.displayTMR("normal"); }); // Display TMR, fast - html.find('#monte-tmr-rapide').click((event) => { - this.actor.displayTMR("rapide"); + html.find('.monte-tmr-rapide').click((event) => { + this.object.displayTMR("rapide"); }); - html.find('#dormir-une-heure').click((event) => { - this.actor.dormir(1); + html.find('.dormir-une-heure').click((event) => { + this.object.dormir(1); }); - html.find('#dormir-chateau-dormant').click((event) => { - this.actor.dormirChateauDormant(); + html.find('.dormir-chateau-dormant').click((event) => { + this.object.dormirChateauDormant(); }); - html.find('#enlever-tous-effets').click((event) => { - this.actor.enleverTousLesEffets(); + html.find('.enlever-tous-effets').click((event) => { + this.object.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.object.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.object.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.object.items.get(myID); item.sheet.render(true); }); @@ -410,161 +392,126 @@ export class RdDActorSheet extends ActorSheet { html.find('.conteneur-name a').click((event) => { let myID = event.currentTarget.attributes['data-item-id'].value; RdDUtility.toggleAfficheContenu(myID); - this.render(true); }); if (this.options.editCaracComp) { // 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)); + this.object.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)); + this.object.updateCaracXP(caracName, parseInt(event.target.value)); }); // On competence change html.find('.competence-value').change((event) => { let compName = event.currentTarget.attributes.compname.value; //console.log("Competence changed :", compName); - this.actor.updateCompetence(compName, parseInt(event.target.value)); + this.object.updateCompetence(compName, parseInt(event.target.value)); }); // On competence xp change html.find('.competence-xp').change((event) => { let compName = event.currentTarget.attributes.compname.value; - this.actor.updateCompetenceXP(compName, parseInt(event.target.value)); + this.object.updateCompetenceXP(compName, parseInt(event.target.value)); }); // On competence xp change html.find('.competence-xp-sort').change((event) => { let compName = event.currentTarget.attributes.compname.value; - this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); + this.object.updateCompetenceXPSort(compName, parseInt(event.target.value)); }); // On competence archetype change html.find('.competence-archetype').change((event) => { let compName = event.currentTarget.attributes.compname.value; - this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); + this.object.updateCompetenceArchetype(compName, parseInt(event.target.value)); }); } - // Gestion du bouton lock/unlock - html.find('.lock-unlock-sheet').click((event) => { - this.options.editCaracComp = !this.options.editCaracComp; - this.render(true); - }); - 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.object.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.object.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.object.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.object.updateCompteur(fieldName, parseInt(event.target.value)); }); - html.find('#ethylisme').change((event) => { - this.actor.setEthylisme(parseInt(event.target.value)); + html.find('.ethylisme').change((event) => { + this.object.setEthylisme(parseInt(event.target.value)); }); - html.find('#stress-test').click((event) => { - this.actor.transformerStress(); - this.render(true); + html.find('.stress-test').click((event) => { + this.object.transformerStress(); }); - html.find('#moral-malheureux').click((event) => { - this.actor.jetDeMoral('malheureuse'); - this.render(true); + html.find('.moral-malheureux').click((event) => { + this.object.jetDeMoral('malheureuse'); + }); + html.find('.moral-neutre').click((event) => { + this.object.jetDeMoral('neutre'); }); - html.find('#moral-neutre').click((event) => { - this.actor.jetDeMoral('neutre'); - this.render(true); + html.find('.moral-heureux').click((event) => { + this.object.jetDeMoral('heureuse'); }); - html.find('#moral-heureux').click((event) => { - this.actor.jetDeMoral('heureuse'); - this.render(true); - }); - html.find('#ethylisme-test').click((event) => { - this.actor.ethylismeTest(); - this.render(true); + html.find('.ethylisme-test').click((event) => { + this.object.ethylismeTest(); }); - html.find('#jet-vie').click((event) => { - this.actor.jetVie(); - this.render(true); + html.find('.jet-vie').click((event) => { + this.object.jetVie(); }); - html.find('#jet-endurance').click((event) => { - this.actor.jetEndurance(); - this.render(true); + html.find('.jet-endurance').click((event) => { + this.object.jetEndurance(); }); html.find('.monnaie-plus').click((event) => { const li = $(event.currentTarget).parents(".item"); - this.actor.monnaieIncDec(li.data("item-id"), 1); - this.render(true); + this.object.monnaieIncDec(li.data("item-id"), 1); }); html.find('.monnaie-moins').click((event) => { const li = $(event.currentTarget).parents(".item"); - this.actor.monnaieIncDec(li.data("item-id"), -1); - this.render(true); + this.object.monnaieIncDec(li.data("item-id"), -1); }); - html.find('#vie-plus').click((event) => { - this.actor.santeIncDec("vie", 1); - this.render(true); + html.find('.vie-plus').click((event) => { + this.object.santeIncDec("vie", 1); }); - html.find('#vie-moins').click((event) => { - this.actor.santeIncDec("vie", -1); - this.render(true); + html.find('.vie-moins').click((event) => { + this.object.santeIncDec("vie", -1); }); - html.find('#endurance-plus').click((event) => { - this.actor.santeIncDec("endurance", 1); - this.render(true); + html.find('.endurance-plus').click((event) => { + this.object.santeIncDec("endurance", 1); }); - html.find('#endurance-moins').click((event) => { - this.actor.santeIncDec("endurance", -1); - this.render(true); + html.find('.endurance-moins').click((event) => { + this.object.santeIncDec("endurance", -1); }); html.find('.data-sante-sonne').click((event) => { - this.actor.setSonne(event.currentTarget.checked); - this.render(true); + this.object.setSonne(event.currentTarget.checked); }); - html.find('#ptreve-actuel-plus').click((event) => { - this.actor.reveActuelIncDec(1); - this.render(true); + html.find('.ptreve-actuel-plus').click((event) => { + this.object.reveActuelIncDec(1); }); - html.find('#ptreve-actuel-moins').click((event) => { - this.actor.reveActuelIncDec(-1); - this.render(true); + html.find('.ptreve-actuel-moins').click((event) => { + this.object.reveActuelIncDec(-1); }); - html.find('#fatigue-plus').click((event) => { - this.actor.santeIncDec("fatigue", 1); - this.render(true); + html.find('.fatigue-plus').click((event) => { + this.object.santeIncDec("fatigue", 1); }); - html.find('#fatigue-moins').click((event) => { - this.actor.santeIncDec("fatigue", -1); - this.render(true); + html.find('.fatigue-moins').click((event) => { + this.object.santeIncDec("fatigue", -1); }); } - /* -------------------------------------------- */ /** @override */ setPosition(options = {}) { @@ -578,7 +525,7 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ /** @override */ - _updateObject(event, formData) { + async _updateObject(event, formData) { // Update the Actor return this.object.update(formData); } diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index a2dd0cb3..dcb67959 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -24,30 +24,24 @@ export class RdDActorVehiculeSheet extends ActorSheet { }); } - /* -------------------------------------------- */ - _checkNull(items) { - if (items && items.length) { - return items; - } - return []; - } - /* -------------------------------------------- */ - getData() { - let data = super.getData(); + async getData() { + let sheetData = await super.getData(); + sheetData.options = { + isGM: game.user.isGM + }; - data.itemsByType = Misc.classify(data.items); + sheetData.itemsByType = Misc.classify(sheetData.items); - RdDUtility.filterItemsPerTypeForSheet(data); - RdDUtility.buildArbreDeConteneur(this, data); + RdDUtility.filterItemsPerTypeForSheet(sheetData); + RdDUtility.buildArbreDeConteneur(this, sheetData); - this.actor.computeEncombrementTotalEtMalusArmure(); - data.data.isGM = game.user.isGM; - data.data.surEncombrementMessage = (this.encTotal > data.capacite_encombrement) ? "Sur-Encombrement!" : ""; + sheetData.calc = { + surEncombrementMessage: (this.encTotal > sheetData.capacite_encombrement) ? "Sur-Encombrement!" : "", + encTotal: await sheetData.actor.computeEncombrementTotalEtMalusArmure() + } - console.log("DATA", data); - - return data; + return sheetData; } /* -------------------------------------------- */ @@ -71,7 +65,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 @@ -102,7 +96,7 @@ export class RdDActorVehiculeSheet extends ActorSheet { /* -------------------------------------------- */ /** @override */ - _updateObject(event, formData) { + async _updateObject(event, formData) { // Update the Actor return this.object.update(formData); } diff --git a/module/actor.js b/module/actor.js index 5ee13feb..b0934781 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,6 +61,8 @@ export class RdDActor extends Actor { if (data instanceof Array) { return super.create(data, options); } + console.log("****************************************************"); + // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic if (data.items) { let actor = super.create(data, options); @@ -68,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); } /* -------------------------------------------- */ @@ -113,12 +107,12 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - setRollWindowsOpened( flag ) { + setRollWindowsOpened(flag) { this.rollWindowsOpened = flag; } /* -------------------------------------------- */ - isRollWindowsOpened( ) { + isRollWindowsOpened() { return this.rollWindowsOpened; } @@ -147,46 +141,35 @@ 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 - let piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1); + //console.log("NO MONNAIR FOUND!!!!", items); + + 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")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 10); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 10); if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Bronze (10 deniers)", 10, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 100); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 100); if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Argent (1 sol)", 100, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1000); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1000); if (!piece) { 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.createOwnedItem(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'; @@ -270,59 +253,56 @@ export class RdDActor extends Actor { return Misc.toInt(this.data.data.compteurs.surenc?.value); } /* -------------------------------------------- */ - loadCompendiumNames() { - return this.data.items.filter((item) => item.type == 'competence'); - } - /* -------------------------------------------- */ getCompetence(name) { return RdDItemCompetence.findCompetence(this.data.items, name); } /* -------------------------------------------- */ 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() { - const list = this.getDraconicList().sort((a, b) => b.data.niveau - a.data.niveau); + const list = this.getDraconicList().sort((a, b) => b.data.data.niveau - a.data.data.niveau); if (list.length == 0) { return { name: "none", data: { niveau: -11 } }; } return duplicate(list[0]); } + getDemiReve() { + return this.data.data.reve.tmrpos.coord; + } /* -------------------------------------------- */ async deleteSortReserve(sortReserve) { - let reserve = duplicate(this.data.data.reve.reserve); - let len = reserve.list.length; - let i = 0; - let newTable = []; - for (i = 0; i < len; i++) { - if (reserve.list[i].coord != sortReserve.coord && reserve.list[i].sort.name != sortReserve.sort.name) - newTable.push(reserve.list[i]); - } - if (newTable.length != len) { - reserve.list = newTable; - await this.update({ "data.reve.reserve": reserve }); + let tmr = TMRUtility.getTMR(sortReserve.coord); + 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) { + sortsEnReserve.splice(index, 1); + await this.update({ "data.reve.reserve.list": sortsEnReserve }); } } @@ -358,7 +338,7 @@ export class RdDActor extends Actor { // 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 @@ -478,9 +458,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.sante.fatigue": fatigue }); + await this.update({ "data.sante.fatigue.value": 0 }); } } ChatMessage.create(message); @@ -491,7 +469,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++) { @@ -507,16 +485,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.compteurs.ethylisme": ethylisme }); } /* -------------------------------------------- */ @@ -530,16 +509,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.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é. "; } } @@ -678,15 +656,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.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"); @@ -703,7 +680,7 @@ export class RdDActor extends Actor { this.setPointsDeChance(caracValue); } } - await this.update({ [caracpath]: caracValue }); + await this.update({ [`data.carac.${caracName}.value`]: caracValue }); } /* -------------------------------------------- */ @@ -711,25 +688,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'; } } @@ -749,8 +726,7 @@ export class RdDActor extends Actor { content: message }); } - const update = { _id: comp._id, 'data.niveau': maxNiveau }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.niveau': maxNiveau }]); } else { console.log("Competence not found", compName); } @@ -761,8 +737,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 }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.xp': compValue }]); } else { console.log("Competence not found", compName); } @@ -773,8 +748,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 }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: comp.id, 'data.xp_sort': compValue }]); } else { console.log("Competence not found", compName); } @@ -784,26 +758,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 }; - const updated = await this.updateEmbeddedEntity("OwnedItem", 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.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.attributs": attributs }); + async updateAttribut(fieldName, fieldValue) { + await this.update({ [`data.attributs.${fieldName}.value`]: fieldValue }); } /* -------------------------------------------- */ @@ -890,7 +859,7 @@ export class RdDActor extends Actor { this.buildSubConteneurObjetList(itemId, list); //console.log("List to delete", list); for (let item of list) { - await this.deleteOwnedItem(item.id); + await this.deleteEmbeddedDocuments('Item', [item.id]); } } @@ -909,7 +878,7 @@ export class RdDActor extends Actor { contenu.splice(index, 1); index = contenu.indexOf(itemId); } - await this.updateEmbeddedEntity("OwnedItem", data2use); + await this.updateEmbeddedDocuments('Item', data2use); } } @@ -922,7 +891,7 @@ export class RdDActor extends Actor { if (conteneur && conteneur.type == 'conteneur') { let data2use = duplicate(conteneur.data); data2use.data.contenu.push(itemId); - await this.updateEmbeddedEntity("OwnedItem", data2use); + await this.updateEmbeddedDocuments('Item', [data2use]); } } @@ -937,7 +906,7 @@ export class RdDActor extends Actor { } } if (conteneurFixedList.length > 0) - await this.updateOwnedItem(conteneurFixedList); + await this.updateEmbeddedDocuments('Item', conteneurFixedList); } /* -------------------------------------------- */ @@ -950,7 +919,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.createOwnedItem(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 } @@ -965,11 +934,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.updateOwnedItem({ _id: newConteneurId, 'data.contenu': contenu }); + await this.updateEmbeddedDocuments('Item', [{ _id: newConteneurId, 'data.contenu': contenu }]); } } for (let item of itemsList) { - await sourceActor.deleteOwnedItem(item.id); + await sourceActor.deleteEmbeddedDocuments('Item', [item.id]); } } @@ -991,19 +960,19 @@ export class RdDActor extends Actor { let malusArmureData = (this.data.data.attributs && this.data.data.attributs.malusarmure) ? duplicate(this.data.data.attributs.malusarmure) : {}; let newMalusArmure = 0; for (const item of this.data.items) { - if (item.type == 'armure' && item.data.equipe) { // Armure équipée, intégration du malus armure total - newMalusArmure += item.data.malus; + if (item.type == 'armure' && item.data.data.equipe) { // Armure équipée, intégration du malus armure total + newMalusArmure += item.data.data.malus; } // Calcul encombrement - if (item.data && item.data.encombrement != undefined) { - if (!Number(item.data.encombrement)) item.data.encombrement = 0; // Auto-fix - if (item.data.quantite == undefined) item.data.quantite = 1; // Auto-fix - if (item.data.quantite < 0) item.data.quantite = 0; // Auto-fix - item.data.encTotal = Number(item.data.encombrement) * Number(item.data.quantite); - //console.log("Enc:", item.name, item.data.encombrement, item.data.quantite, item.data.encTotal); - encTotal += item.data.encTotal; - } else { - item.data.encTotal = 0; // Force default enc + if (item.data && item.data.data.encombrement != undefined) { + if (!Number(item.data.data.encombrement)) item.data.data.encombrement = 0; // Auto-fix + item.data.data.quantite = item.data.data.quantite ??1; // Auto-fix + if (item.data.data.quantite < 0) item.data.data.quantite = 0; // Auto-fix + item.data.data.encTotal = Number(item.data.data.encombrement) * Number(item.data.data.quantite); + //console.log("Enc:", item.name, item.data.data.encombrement, item.data.data.quantite, item.data.data.encTotal); + encTotal += item.data.data.encTotal; + // } else { + // item.data.data.encTotal = 0; // Force default enc } } // Mise à jour valeur totale et états @@ -1012,8 +981,9 @@ export class RdDActor extends Actor { // Mise à jour éventuelle du malus armure if (this.data.data.attributs && this.data.data.attributs.malusarmure && newMalusArmure != malusArmureData.value) { malusArmureData.value = newMalusArmure; - await this.update({ "data.attributs.malusarmure": malusArmureData }); + await this.update({ "data.data.attributs.malusarmure": malusArmureData }); } + return this.encTotal; } /* -------------------------------------------- */ @@ -1022,15 +992,16 @@ 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 (!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 - prixTotalEquipement += Number(item.data.cout) * Number(item.data.quantite); + if (item.data.data && item.data.data.cout != undefined) { + if (!Number(item.data.data.cout)) item.data.data.cout = 0; // Auto-fix + if (item.data.data.quantite == undefined) item.data.data.quantite = 1; // Auto-fix + if (item.data.data.cout < 0) item.data.data.cout = 0; // Auto-fix + prixTotalEquipement += Number(item.data.data.cout) * Number(item.data.data.quantite); } } // Mise à jour valeur totale de l'équipement this.prixTotalEquipement = prixTotalEquipement; + return this.prixTotalEquipement; } /* -------------------------------------------- */ @@ -1087,25 +1058,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.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), @@ -1121,14 +1088,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.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), @@ -1145,7 +1110,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; } @@ -1156,88 +1121,45 @@ export class RdDActor extends Actor { return tmrInnaccessibles.map(it => it.data.coord); } - /* -------------------------------------------- */ - displayTMRQueueSouffleInformation() { - let messages = []; - for (let item of this.data.items) { - if (EffetsDraconiques.isUrgenceDraconique(item)) { - messages.push("Vous souffrez d'une Urgence Draconique : " + item.data.description); - } - if (EffetsDraconiques.isPeriple(item)) { - messages.push("Vous souffrez du Souffle Périple. Vous devez gérer manuellement le détail du Périple.
" + item.data.description); - } - } - - if (messages.length > 0) { - ChatMessage.create({ - whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: "RAPPEL !
" + messages.join('
') - }); - } - } - /* -------------------------------------------- */ 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.data.data.reve.tmrpos.coord) - newTable.push(rencontres.list[i]); - } - if (newTable.length != len) { - rencontres.list = newTable; - //console.log("Result: ", rencontres); - await this.update({ "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.data.data.reve.tmrpos.coord) - already = true; - } - if (!already) { - rencontres.list.push(currentRencontre); - await this.update({ "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.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) { - let tmrPos = duplicate(this.data.data.reve.tmrpos); - tmrPos.coord = coord; - await this.update({ "data.reve.tmrpos": tmrPos }); + 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.reve.reve": reve }); + await this.update({ "data.reve.reve.value": Math.max(this.data.data.reve.reve.value + value, 0) }); } /* -------------------------------------------- */ @@ -1251,16 +1173,12 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async setPointsDeSeuil(value) { - let seuil = duplicate(this.data.data.reve.seuil); - seuil.value = value; - await this.update({ "data.reve.seuil": seuil }); + 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.compteurs.chance": chance }); + await this.update({ "data.compteurs.chance.value": value }); } /* -------------------------------------------- */ @@ -1272,13 +1190,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 !` }); } } } @@ -1298,10 +1216,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.sante.sonne": sonneData }); + await this.update({ "data.sante.sonne.value": sonne }); + await this.update({ "data.sante.sonne.round": round }); } /* -------------------------------------------- */ @@ -1322,12 +1238,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.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; } @@ -1354,9 +1268,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.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é`; @@ -1514,22 +1426,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)) }); } } @@ -1547,13 +1453,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.compteurs.ethylisme": ethylisme }); } /* -------------------------------------------- */ @@ -1644,7 +1548,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, @@ -1702,63 +1606,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) - }); - } } } @@ -1780,14 +1675,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; } /* -------------------------------------------- */ @@ -1818,7 +1713,7 @@ export class RdDActor extends Actor { let bestDraconic = this.getBestDraconic(); for (let sort of sortList) { let voie = sort.data.draconic.toLowerCase(); - let draconic = draconicList.find(item => item.data.categorie == 'draconic' && item.name.toLowerCase().includes(voie)); + let draconic = draconicList.find(item => item.data.data.categorie == 'draconic' && item.name.toLowerCase().includes(voie)); if (sort.name.toLowerCase().includes('aura')) { draconic = bestDraconic; } @@ -1898,7 +1793,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."; @@ -1950,7 +1845,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); @@ -1958,10 +1853,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); @@ -1977,15 +1872,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.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 ! @@ -2048,7 +1943,7 @@ export class RdDActor extends Actor { label: 'Jet ' + Grammar.apostrophe('de', name), callbacks: [ this.createCallbackExperience(), - this.createCallbackAppelAuMoral(), + this.createCallbackAppelAuMoral(), { action: r => this._competenceResult(r) } ] }); @@ -2071,7 +1966,7 @@ export class RdDActor extends Actor { " - XP : " + item.data.data.xp + " - Compétences : " + item.data.data.competence } } - await this.createOwnedItem(tache, { renderSheet: true }); + await this.createEmbeddedDocuments('Item', [tache], { renderSheet: true }); } /* -------------------------------------------- */ @@ -2106,7 +2001,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'); @@ -2115,7 +2010,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _tacheETotal(rollData) { rollData.tache.data.difficulte--; - this.updateEmbeddedEntity("OwnedItem", rollData.tache); + this.updateEmbeddedDocuments('Item', [rollData.tache]); } /* -------------------------------------------- */ @@ -2130,7 +2025,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]); } @@ -2170,17 +2065,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); @@ -2277,7 +2172,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _meditationETotal(meditationData) { meditationData.meditation.data.malus--; - this.updateEmbeddedEntity("OwnedItem", meditationData.meditation); + this.updateEmbeddedDocuments('Item', [meditationData.meditation]); } /* -------------------------------------------- */ @@ -2291,7 +2186,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, @@ -2321,22 +2216,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.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.compteurs.destinee": destinee }); + let destinee = this.data.data.compteurs.destinee.value - 1; + await this.update({ "data.compteurs.destinee.value": destinee }); onSuccess(); } else { @@ -2372,7 +2261,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; @@ -2380,19 +2268,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.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) }); } @@ -2410,16 +2296,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); + let toDelete = this.data.items.filter((item) => item.data.data.jourindex < game.system.rdd.calendrier.getCurrentDayIndex()); + await this.deleteEmbeddedDocuments('Item', toDelete.map(i => i._id)); // Affichage Dialog this.astrologieNombresAstraux(); @@ -2459,6 +2344,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()) { @@ -2470,12 +2357,12 @@ 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"); } /* -------------------------------------------- */ getDraconicList() { - return this.data.items.filter(item => item.data.categorie == 'draconic') + return this.data.items.filter(item => item.data.data.categorie == 'draconic') } /* -------------------------------------------- */ @@ -2553,28 +2440,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.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.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); - this.computeEncombrementTotalEtMalusArmure(); // Mise à jour encombrement + await this.updateEmbeddedDocuments('Item', [update]); + await 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.data.equipe) + this.verifierForceMin(item.data.data); } } @@ -2585,7 +2474,7 @@ export class RdDActor extends Actor { let protection = 0; const armures = this.data.items.filter(it => it.type == "armure" && it.data.equipe); for (const item of armures) { - protection += new Roll(item.data.protection.toString()).roll().total; + protection += new Roll(item.data.data.protection.toString()).roll().total; if (dmg > 0) { this._deteriorerArmure(item, dmg); dmg = 0; @@ -2595,10 +2484,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); @@ -2627,7 +2516,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]); } /* -------------------------------------------- */ @@ -2658,7 +2547,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, @@ -2695,7 +2584,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; @@ -2784,34 +2673,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 */ @@ -2832,7 +2721,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 @@ -2886,25 +2775,25 @@ export class RdDActor extends Actor { let nbEtain = deniers - (nbBronze * 10); // console.log("ARGENT", nbOr, nbArgent, nbBronze, nbEtain); - let piece = this.data.items.find(item => item.type == 'monnaie' && item.data.valeur_deniers == 1000); + let piece = this.data.items.find(item => item.type == 'monnaie' && item.data.data.valeur_deniers == 1000); if (piece) { let update = { _id: piece._id, 'data.quantite': nbOr }; const updated = await this.updateEmbeddedEntity("OwnedItem", update); } - piece = this.data.items.find(item => item.type == 'monnaie' && item.data.valeur_deniers == 100); + piece = this.data.items.find(item => item.type == 'monnaie' && item.data.data.valeur_deniers == 100); if (piece) { let update = { _id: piece._id, 'data.quantite': nbArgent }; const updated = await this.updateEmbeddedEntity("OwnedItem", update); } - piece = this.data.items.find(item => item.type == 'monnaie' && item.data.valeur_deniers == 10); + piece = this.data.items.find(item => item.type == 'monnaie' && item.data.data.valeur_deniers == 10); if (piece) { let update = { _id: piece._id, 'data.quantite': nbBronze }; const updated = await this.updateEmbeddedEntity("OwnedItem", update); } - piece = this.data.items.find(item => item.type == 'monnaie' && item.data.valeur_deniers == 1); + piece = this.data.items.find(item => item.type == 'monnaie' && item.data.data.valeur_deniers == 1); if (piece) { let update = { _id: piece._id, 'data.quantite': nbEtain }; const updated = await this.updateEmbeddedEntity("OwnedItem", update); @@ -2916,7 +2805,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); } @@ -2937,7 +2826,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.`; } @@ -2950,20 +2839,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, @@ -3093,7 +2980,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ enleverTousLesEffets() { - this.deleteEmbeddedEntity('ActiveEffect', Array.from(this.effects?.keys() ?? [])); + this.deleteEmbeddedDocuments('ActiveEffect', Array.from(this.effects?.keys() ?? [])); } /* -------------------------------------------- */ @@ -3152,7 +3039,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _deleteStatusEffectsByIds(effectIds, options) { - this.deleteEmbeddedEntity('ActiveEffect', effectIds, options); + this.deleteEmbeddedDocuments('ActiveEffect', effectIds, options); this.applyActiveEffects(); } @@ -3167,21 +3054,20 @@ export class RdDActor extends Actor { this.deleteStatusEffectById(statusEffect.id, options); const effet = duplicate(statusEffect); effet["flags.core.statusId"] = effet.id; - await this.createEmbeddedEntity('ActiveEffect', effet, options); + await this.createEmbeddedDocuments('ActiveEffect', [effet], options); this.applyActiveEffects(); } /* -------------------------------------------- */ - 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': @@ -3192,13 +3078,16 @@ export class RdDActor extends Actor { } async onDeleteOwnedItem(item, options, id) { - switch (item.type) { + switch (item.data.type) { case 'tete': case 'queue': case 'ombre': case 'souffle': await this.onDeleteOwnedDraconique(item, options, id); break; + case 'casetmr': + await this.onDeleteOwnedCaseTmr(item, options, id); + break; } } @@ -3220,10 +3109,18 @@ export class RdDActor extends Actor { } } - notifyGestionTeteSouffleQueue(item, manualMessage=true){ + async onDeleteOwnedCaseTmr(item, options, id) { + let draconique = Draconique.all().find(it => it.isCase(item)); + if (draconique) { + draconique.onActorDeleteCaseTmr(this, item) + } + } + + 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/chat-utility.js b/module/chat-utility.js index d38514ca..ea6b4772 100644 --- a/module/chat-utility.js +++ b/module/chat-utility.js @@ -13,7 +13,7 @@ export class ChatUtility { /* -------------------------------------------- */ static onRemoveMessages(part, gmId) { - if (game.user._id == gmId) { + if (game.user.data._id == gmId) { const toDelete = game.messages.filter(it => it.data.content.includes(part)); toDelete.forEach(it => it.delete()); } @@ -22,10 +22,10 @@ export class ChatUtility { /* -------------------------------------------- */ static removeChatMessageContaining(part) { - const gmId = game.user.isGM ? game.user._id : game.users.entities.find(u => u.isGM)?.id; + const gmId = game.user.isGM ? game.user.data._id : game.users.entities.find(u => u.isGM)?.data.id; if (!gmId || game.user.isGM) { - ChatUtility.onRemoveMessages(part, game.user._id); + ChatUtility.onRemoveMessages(part, game.user.data._id); } else { game.socket.emit("system.foundryvtt-reve-de-dragon", { diff --git a/module/grammar.js b/module/grammar.js index e75bdc77..7a35cebc 100644 --- a/module/grammar.js +++ b/module/grammar.js @@ -26,7 +26,7 @@ export class Grammar { /* -------------------------------------------- */ static articleDetermine(genre) { - switch (toLowerCaseNoAccent(genre)) { + switch (Grammar.toLowerCaseNoAccent(genre)) { case 'f': case 'feminin': return 'la'; case 'p': case 'mp': case 'fp': case 'pluriel': return 'les'; default: @@ -35,8 +35,8 @@ export class Grammar { } /* -------------------------------------------- */ - static articleIndétermine(genre) { - switch (toLowerCaseNoAccent(genre)) { + static articleIndetermine(genre) { + switch (Grammar.toLowerCaseNoAccent(genre)) { case 'f': case 'feminin': return 'une'; case 'p': case 'fp': case 'mp': case 'pluriel': return 'des'; case 'n': case 'neutre': return 'du' @@ -58,7 +58,7 @@ export class Grammar { * @param {...any} mots */ static accord(genre, ...mots) { - switch (toLowerCaseNoAccent(genre)) { + switch (Grammar.toLowerCaseNoAccent(genre)) { default: case 'n': case 'neutre': case 'm': case 'masculin': return mots[0]; diff --git a/module/item-arme.js b/module/item-arme.js index 68e3cafb..6bbdb810 100644 --- a/module/item-arme.js +++ b/module/item-arme.js @@ -1,4 +1,5 @@ import { RdDItemCompetenceCreature } from "./item-competencecreature.js" +import { RdDCombatManager } from "./rdd-combat.js" const nomCategorieParade = { "sans-armes": "Sans arme / armes naturelles", @@ -17,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.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(); } @@ -50,20 +51,20 @@ export class RdDItemArme extends Item { /* -------------------------------------------- */ static getCategorieParade(arme) { - if (arme.data.categorie_parade) { - return arme.data.categorie_parade; + if (arme.data.data.categorie_parade) { + return arme.data.data.categorie_parade; } // pour compatibilité avec des personnages existants - if (arme.type == 'competencecreature' || arme.data.categorie == 'creature' ) { - return arme.data.categorie_parade || (arme.data.isparade ? 'sans-armes' : ''); + if (arme.type == 'competencecreature' || arme.data.data.categorie == 'creature' ) { + return arme.data.data.categorie_parade || (arme.data.data.isparade ? 'sans-armes' : ''); } if (!arme.type.match(/arme|competencecreature/)) { return ''; } - if (arme.data.competence == undefined) { + if (arme.data.data.competence == undefined) { return 'competencecreature'; } - let compname = arme.data.competence.toLowerCase(); + let compname = arme.data.data.competence.toLowerCase(); if (compname.match(/^(dague de jet|javelot|fouet|arc|arbalête|fronde|hache de jet|fléau)$/)) return ''; if (compname.match('hache')) return 'haches'; @@ -121,20 +122,20 @@ export class RdDItemArme extends Item { /* -------------------------------------------- */ static armeUneOuDeuxMains(arme, aUneMain) { if (arme) { - arme.data.unemain = arme.data.unemain || !arme.data.deuxmains; - const uneOuDeuxMains = arme.data.unemain && arme.data.deuxmains; - const containsSlash = !Number.isInteger(arme.data.dommages) && arme.data.dommages.includes("/"); + arme.data.data.unemain = arme.data.data.unemain || !arme.data.data.deuxmains; + const uneOuDeuxMains = arme.data.data.unemain && arme.data.data.deuxmains; + const containsSlash = !Number.isInteger(arme.data.data.dommages) && arme.data.data.dommages.includes("/"); if (containsSlash) { // Sanity check arme = duplicate(arme); - const tableauDegats = arme.data.dommages.split("/"); + const tableauDegats = arme.data.data.dommages.split("/"); if (aUneMain) - arme.data.dommagesReels = Number(tableauDegats[0]); + arme.data.data.dommagesReels = Number(tableauDegats[0]); else // 2 mains - arme.data.dommagesReels = Number(tableauDegats[1]); + arme.data.data.dommagesReels = Number(tableauDegats[1]); } else { - arme.data.dommagesReels = Number(arme.data.dommages); + arme.data.data.dommagesReels = Number(arme.data.data.dommages); } if (uneOuDeuxMains != containsSlash) { @@ -145,12 +146,13 @@ 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.data.resistance > 0 || item.data.data.portee_courte>0); } static mainsNues(actorData={}) { const mainsNues = { name: 'Mains nues', + img: "systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp", data: { equipe: true, rapide: true, @@ -167,4 +169,24 @@ export class RdDItemArme extends Item { } return mainsNues } -} + + static ajoutCorpsACorps(armes, competences, carac) { + let corpsACorps = competences.find(it => it.name == 'Corps à corps'); + if (corpsACorps) { + let cc_init = RdDCombatManager.calculInitiative(corpsACorps.data.niveau, carac['melee'].value); + armes.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: cc_init })); + } + } + + static computeNiveauArmes(armes, competences) { + for (const arme of armes) { + arme.data.niveau = RdDItemArme.computeNiveauArme(arme, competences); + } + } + + static computeNiveauArme(armeData, competences) { + const compName = armeData.data.competence; + const compArme = competences.find(it => it.name == compName); + return compArme?.data.niveau ?? -8; + } +} \ No newline at end of file diff --git a/module/item-competence.js b/module/item-competence.js index deca47f1..8b8c98d9 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -1,3 +1,4 @@ +import { RdDUtility } from "./rdd-utility.js"; const competenceTroncs = [["Esquive", "Dague", "Corps à corps"], ["Epée à 1 main", "Epée à 2 mains", "Hache à 1 main", "Hache à 2 mains", "Lance", "Masse à 1 main", "Masse à 2 mains"]]; @@ -16,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) { @@ -55,33 +65,70 @@ export class RdDItemCompetence extends Item { } return false; } + /* -------------------------------------------- */ - static computeCompetenceXPCost(competence) { - let xp = RdDItemCompetence.getDeltaXp(competence.data.base, competence.data.niveau ?? competence.data.base); - xp += competence.data.xp ?? 0; - if ( competence.name.includes('Thanatos') ) xp *= 2; /// Thanatos compte double ! - xp += competence.data.xp_sort ?? 0; - return xp; + static computeTotalXP(competences) { + const total = competences.map(c => RdDItemCompetence.computeXP(c)) + .reduce((a, b) => a + b, 0); + const economieTronc = RdDItemCompetence.computeEconomieXPTronc(competences); + return total - economieTronc; } /* -------------------------------------------- */ - static computeEconomieCompetenceTroncXP(competences) { - let economie = 0; - for (let troncList of competenceTroncs) { - let list = troncList.map(name => RdDItemCompetence.findCompetence(competences, name)) - .sort( (c1, c2) => c2.data.niveau - c1.data.niveau); // tri du plus haut au plus bas - list.splice(0,1); // ignorer la plus élevée - list.forEach(c => { - economie += RdDItemCompetence.getDeltaXp(c.data.base, Math.min(c.data.niveau, 0) ); - }); - } - return economie; + static computeXP(competence) { + // Thanatos compte double ! + const factor = competence.name.includes('Thanatos') ? 2 : 1 + const xpNiveau = RdDItemCompetence.computeDeltaXP(competence.data.base, competence.data.niveau ?? competence.data.base); + const xp = competence.data.xp ?? 0; + const xpSort = competence.data.xp_sort ?? 0; + return factor * (xpNiveau + xp) + xpSort; + } + + /* -------------------------------------------- */ + static computeEconomieXPTronc(competences) { + return competenceTroncs.map( + list => list.map(name => RdDItemCompetence.findCompetence(competences, name)) + // calcul du coût xp jusqu'au niveau 0 maximum + .map(it => RdDItemCompetence.computeDeltaXP(it?.data.base ?? -11, Math.min(it?.data.niveau ?? -11, 0))) + .sort((a, b) => b - a) // tri descendant + .splice(0, 1) // ignorer le coût xp le plus élevé + .reduce((a, b) => a + b, 0) + ).reduce((a, b) => a + b, 0); + } + + static setLevelUp(competences) { + competences.forEach(it => { + it.data.xpNext = RdDItemCompetence.getCompetenceNextXp(it.data.niveau); + it.data.isLevelUp = it.data.xp >= it.data.xpNext; + }); + } + + static computeResumeArchetype(competences) { + const archetype = RdDUtility.getLimitesArchetypes(); + competences.forEach(item => { + let niveau = (item.data.niveau_archetype < 0) ? 0 : item.data.niveau_archetype; + archetype[niveau] = archetype[niveau] ?? { "niveau": niveau, "nombreMax": 0, "nombre": 0 }; + archetype[niveau].nombre = (archetype[niveau]?.nombre ?? 0) + 1; + }); + return archetype; + } + + static isVisible(competence) { + return Number(competence.data.niveau) != RdDUtility.getCategorieNiveauBase(competence.data.categorie); + } + + static isNiveauBase(competence) { + return Number(competence.data.niveau) == RdDUtility.getCategorieNiveauBase(competence.data.categorie); } /* -------------------------------------------- */ static findCompetence(list, name) { name = name.toLowerCase(); - return list.find(item => item.name.toLowerCase() == name && (item.type == "competence" || item.type == "competencecreature")) + return list.find(it => it.name.toLowerCase() == name && (it.type == "competence" || it.type == "competencecreature")) + } + + static getEsquive(competences) { + return { name: "Esquive", niveau: RdDItemCompetence.findCompetence(competences, 'Esquive')?.data.niveau ?? -6 }; } /* -------------------------------------------- */ @@ -96,14 +143,14 @@ export class RdDItemCompetence extends Item { } /* -------------------------------------------- */ - static getDeltaXp(from, to) { + static computeDeltaXP(from, to) { RdDItemCompetence._valideNiveau(from); RdDItemCompetence._valideNiveau(to); return competence_xp_cumul[to] - competence_xp_cumul[from]; } /* -------------------------------------------- */ - static _valideNiveau(niveau){ + static _valideNiveau(niveau) { if (niveau < -11 || niveau > competence_niveau_max) { console.warn("Niveau en dehors des niveaux de compétences: [-11, " + competence_niveau_max + "]", niveau) } 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 f70e3483..f47bf90c 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 } @@ -47,26 +47,27 @@ export class RdDItemSheet extends ItemSheet { /* -------------------------------------------- */ async getData() { - let data = super.getData(); - data.categorieCompetences = RdDUtility.getCategorieCompetences(); - if ( data.item.type == 'tache' || data.item.type == 'livre' || data.item.type == 'meditation' || data.item.type == 'oeuvre') { - data.caracList = duplicate(game.system.model.Actor.personnage.carac); - data.competences = await RdDUtility.loadCompendiumNames( 'foundryvtt-reve-de-dragon.competences' ); + let sheetData = super.getData(); + + sheetData.categorieCompetences = RdDUtility.getCategorieCompetences(); + if ( sheetData.data.type == 'tache' || sheetData.data.type == 'livre' || sheetData.data.type == 'meditation' || sheetData.data.type == 'oeuvre') { + sheetData.caracList = duplicate(game.system.model.Actor.personnage.carac); + sheetData.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences' ); } - if (data.item.type == 'arme') { - data.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it)); + if (sheetData.data.type == 'arme') { + sheetData.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it)); } - if ( data.item.type == 'recettealchimique' ) { - RdDAlchimie.processManipulation(data.item, this.actor && this.actor._id ); + if ( sheetData.data.type == 'recettealchimique' ) { + RdDAlchimie.processManipulation(sheetData.item, this.actor && this.actor.id ); } if ( this.actor ) { - data.isOwned = true; - data.actorId = this.actor._id; + sheetData.isOwned = true; + sheetData.actorId = this.actor.id; } - data.bonusCaseList = RdDItemSort.getBonusCaseList(data, true); - data.isGM = game.user.isGM; // Pour verrouiller certaines éditions + sheetData.bonusCaseList = RdDItemSort.getBonusCaseList(sheetData, true); + sheetData.isGM = game.user.isGM; // Pour verrouiller certaines éditions - return data; + return sheetData; } /* -------------------------------------------- */ @@ -111,7 +112,7 @@ export class RdDItemSheet extends ItemSheet { async _onClickSelectCategorie(event) { event.preventDefault(); - let level = RdDUtility.getLevelCategory(event.currentTarget.value); + let level = RdDUtility.getCategorieNiveauBase(event.currentTarget.value); this.object.data.data.base = level; $("#base").val( level ); } @@ -119,17 +120,17 @@ 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`; } /* -------------------------------------------- */ /** @override */ - _updateObject(event, formData) { + async _updateObject(event, formData) { // Données de bonus de cases ? formData = RdDItemSort.buildBonusCaseStringFromFormData( formData ); - + //console.log("HERE", this, formData, this.object.data ); return this.object.update(formData); } } 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..0c6f1237 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,22 +39,23 @@ export class Misc { } } - static classify(items, classifier = it => it.type, transform = it => it) { - let itemsBy = {}; - Misc.classifyInto(itemsBy, items, classifier, transform); - return itemsBy; + static classify(items, classifier = item => item.type, transform = it => it) { + return Misc.classifyInto({}, items, classifier, transform); } - static classifyInto(itemsBy, items, classifier = it => it.type, transform = it => it) { - for (const item of items) { - const classification = classifier(item); - let list = itemsBy[classification]; - if (!list) { - list = []; - itemsBy[classification] = list; + static classifyInto(itemsBy, items, classifier = item => item.type, transform = it => it) { + if (items) { + for (const item of items) { + const classification = classifier(item); + let list = itemsBy[classification]; + if (!list) { + list = []; + itemsBy[classification] = list; + } + list.push(transform(item)); } - list.push(transform(item)); } + return itemsBy; } static rollOneOf(array) { @@ -66,5 +65,4 @@ export class Misc { static distinct(array) { return [...new Set(array)]; } - } \ No newline at end of file diff --git a/module/poetique.js b/module/poetique.js index 58127bf8..e448d6e7 100644 --- a/module/poetique.js +++ b/module/poetique.js @@ -4,25 +4,25 @@ const poesieHautReve = [ { reference: 'Le Ratier Bretonien', extrait: `Le courant du Fleuve -
Te domine et te Porte -
Avant que tu te moeuves -
Combat le, ou il t'emporte` +
Te domine et te Porte +
Avant que tu te moeuves +
Combat le, ou il t'emporte` }, { reference: 'Incompatibilité, Charles Beaudelaire', extrait: `Et lorsque par hasard une nuée errante -
Assombrit dans son vol le lac silencieux, -
On croirait voir la robe ou l'ombre transparente -
D'un esprit qui voyage et passe dans les cieux.` +
Assombrit dans son vol le lac silencieux, +
On croirait voir la robe ou l'ombre transparente +
D'un esprit qui voyage et passe dans les cieux.` }, { reference: 'Au fleuve de Loire, Joachim du Bellay', extrait: `Ô de qui la vive course -
Prend sa bienheureuse source, -
D’une argentine fontaine, -
Qui d’une fuite lointaine, -
Te rends au sein fluctueux -
De l’Océan monstrueux` +
Prend sa bienheureuse source, +
D’une argentine fontaine, +
Qui d’une fuite lointaine, +
Te rends au sein fluctueux +
De l’Océan monstrueux` }, { reference: 'Denis Gerfaud', @@ -61,10 +61,188 @@ const poesieHautReve = [ Nul ne sait qui est le créateur des Dragons, ni qui est leur maître. Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»` }, + { + reference: "La chevelure, Charles Baudelaire", + extrait: `J'irai là-bas où l'arbre et l'homme, pleins de sève, +
Se pâment longuement sous l'ardeur des climats ; +
Fortes tresses, soyez la houle qui m'enlève !` + }, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `En réalité, tous les éléments du rêve des Dragons expriment + le Draconic : chaque pierre, chaque fleur, chaque goutte d'eau, + chaque nuage est porteur d'un message dans la langue des Dragons` + }, + { + reference: "Femmes damnées (2), Charles Baudelaire", + extrait: `Comme je descendais des Fleuves impassibles, +
Je ne me sentis plus guidé par les haleurs : +
Des Peaux-Rouges criards les avaient pris pour cibles, +
Les ayant cloués nus aux poteaux de couleurs.` + }, + { + reference: "Le bateau ivre, Arthur Rimbaud", + extrait: `Loin des peuples vivants, errantes, condamnées, +
A travers les déserts courez comme les loups ; +
Faites votre destin, âmes désordonnées, +
Et fuyez l'infini que vous portez en vous !` + }, + { + reference: "L'Ennemi, Charles Baudelaire", + extrait: `Et qui sait si les fleurs nouvelles que je rêve +
Trouveront dans ce sol lavé comme une grève +
Le mystique aliment qui ferait leur vigueur ?` + }, + { + reference: "Une charogne, Charles Baudelaire", + extrait: `Et le ciel regardait la carcasse superbe +
Comme une fleur s'épanouir. +
La puanteur était si forte, que sur l'herbe +
Vous crûtes vous évanouir.` + }, + { + reference: "Conseil, Victor Hugo", + extrait: `Rois ! la bure est souvent jalouse du velours. +
Le peuple a froid l'hiver, le peuple a faim toujours. +
Rendez-lui son sort plus facile. +
Le peuple souvent porte un bien rude collier. +
Ouvrez l'école aux fils, aux pères l'atelier, +
À tous vos bras, auguste asile !` + }, + { + reference: "El Desdichado, Gérard de Nerval", + extrait: `Suis-je Amour ou Phébus ?... Lusignan ou Biron ? +
Mon front est rouge encor du baiser de la Reine ; +
J'ai rêvé dans la Grotte où nage la sirène...` + }, + { + reference: "Caligula - IIIème chant, Gérard de Nerval", + extrait: `Allez, que le caprice emporte +
Chaque âme selon son désir, +
Et que, close après vous, la porte +
Ne se rouvre plus qu'au plaisir.` + }, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `Les sages ont encore coutume de dire : +
« Mais comment les Dragons peuvent-ils + être influencés par une créature qui, tout + bien considéré, n'existe pas vraiment pour eux, + qui n'est que le fantasme de leur activité nocturne ? »` + }, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `La légende affirme que ce sont les Gnomes qui furent + les premiers haut-rêvants. En observant les pierres précieuses, + les gemmes qui sont les larmes de joie des Dragons, ils parvinrent à + en comprendre la langue. Et l'ayant comprise, ils purent s'en servir + pour influencer le cours du rêve`, + }, + { + reference: "Quand le rêve se brise, Cypora Sebagh", + extrait: `Quand le rêve se brise, +
Dans la plainte du jour, +
Ma mémoire devient grise +
Et sombre, tour à tour, +
Dans le puits du silence +
Et de la solitude ; +
Elle reprend son errance +
Parmi la multitude.` + } + , + { + reference: "Une charogne, Charles Baudelaire", + extrait: `Les formes s'effaçaient et n'étaient plus qu'un rêve, +
Une ébauche lente à venir +
Sur la toile oubliée, et que l'artiste achève +
Seulement par le souvenir.` + }, + { + reference: "La chevelure, Charles Baudelaire", + extrait: `Longtemps ! toujours ! ma main dans ta crinière lourde +
Sèmera le rubis, la perle et le saphir, +
Afin qu'à mon désir tu ne sois jamais sourde ! +
N'es-tu pas l'oasis où je rêve, et la gourde +
Où je hume à longs traits le vin du souvenir` + }, + { + reference: "Un Fou et un Sage, Jean de La Fontaine", + extrait: `Certain Fou poursuivait à coups de pierre un Sage. +
Le Sage se retourne et lui dit : Mon ami, +
C'est fort bien fait à toi ; reçois cet écu-ci : +
Tu fatigues assez pour gagner davantage.` + }, + { + reference: "Guitare, Victor Hugo", + extrait: `Je la voyais passer de ma demeure, +
Et c'était tout. +
Mais à présent je m'ennuie à toute heure, +
Plein de dégoût, +
Rêveur oisif, l'âme dans la campagne, +
La dague au clou ... – +
Le vent qui vient à travers la montagne +
M'a rendu fou !` + }, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement + des temps, le commencement des rêves. Durant cette période plus mythique + que réellement historique, les Dragons aimaient à se rêver eux-mêmes.` + }, + { + reference: "Les Djinns, Victor Hugo", + extrait: `C'est l'essaim des Djinns qui passe, +
Et tourbillonne en sifflant ! +
Les ifs, que leur vol fracasse, +
Craquent comme un pin brûlant.`}, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les + Gnomes s'enfoncèrent profondément sous les montagnes et la magie passa aux + mains des Humains qui en usèrent et abusèrent, se croyant devenus les maîtres du monde` + }, + { + reference: "Lily, Pierre Perret", + extrait: `Elle aurait pas cru sans le voir +
Que la couleur du désespoir +
Là-bas aussi ce fût le noir.` + }, + + { + reference: "Qu'est-ce de votre vie ? une bouteille molle, Jean-Baptiste Chassignet", + extrait: `Qu'est-ce de votre vie ? un tourbillon rouant +
De fumière à flot gris, parmi l'air se jouant, +
Qui passe plus soudain que foudre meurtrière.` + }, + { + reference: "Les Djinns, poème Victor Hugo", + extrait: `Cris de l'enfer! voix qui hurle et qui pleure ! +
L'horrible essaim, poussé par l'aquilon, +
Sans doute, ô ciel ! s'abat sur ma demeure. +
Le mur fléchit sous le noir bataillon. +
La maison crie et chancelle penchée, +
Et l'on dirait que, du sol arrachée, +
Ainsi qu'il chasse une feuille séchée, +
Le vent la roule avec leur tourbillon !` + }, + { + reference: "Rêve de Dragon, Denis Gerfaud", + extrait: `Le monde est Rêve de Dragons, mais nous ne savons +
ni leur apparence ni qui sont les dragons. +
En dépit de l'iconographie qui les clame +
immenses créatures ailées crachant des flammes` + }, + { + reference: "El Desdichado, Gérard de Nerval", + extrait: `Je suis le Ténébreux, – le Veuf, – l'Inconsolé, +
Le Prince d'Aquitaine à la Tour abolie : +
Ma seule Etoile est morte, – et mon luth constellé +
Porte le Soleil noir de la Mélancolie.` + }, ] export class Poetique { - static getExtrait(){ + static getExtrait() { return Misc.rollOneOf(poesieHautReve); } diff --git a/module/rdd-astrologie-joueur.js b/module/rdd-astrologie-joueur.js index eccad906..79a4aec3 100644 --- a/module/rdd-astrologie-joueur.js +++ b/module/rdd-astrologie-joueur.js @@ -43,15 +43,15 @@ 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] ) { - itemFiltered[item.data.jourindex].listValues.push(item.data.value); + if ( itemFiltered[item.data.data.jourindex] ) { + itemFiltered[item.data.data.jourindex].listValues.push(item.data.data.value); } else { - itemFiltered[item.data.jourindex] = { - listValues: [ item.data.value ], - jourlabel: item.data.jourlabel + itemFiltered[item.data.data.jourindex] = { + listValues: [ item.data.data.value ], + jourlabel: item.data.data.jourlabel } } } @@ -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-calendrier.js b/module/rdd-calendrier.js index 705317b6..153aff81 100644 --- a/module/rdd-calendrier.js +++ b/module/rdd-calendrier.js @@ -58,15 +58,16 @@ export class RdDCalendrier extends Application { } // nombre astral if ( game.user.isGM) { - this.listeNombreAstral = this._loadListNombreAstral(); + this.listeNombreAstral = this._loadListeNombreAstral(); this.rebuildListeNombreAstral(); // Ensure always up-to-date } console.log(this.calendrier, this.calendrierPos, this.listeNombreAstral); } /* -------------------------------------------- */ - _loadListNombreAstral() { - return Object.values(game.settings.get("foundryvtt-reve-de-dragon", "liste-nombre-astral")); + _loadListeNombreAstral() { + const settingListeNombreAstral = game.settings.get("foundryvtt-reve-de-dragon", "liste-nombre-astral"); + return Object.values(settingListeNombreAstral); } /* -------------------------------------------- */ @@ -124,7 +125,7 @@ export class RdDCalendrier extends Application { /* -------------------------------------------- */ getNombreAstral( indexDate ) { - const liste = this.listeNombreAstral ?? this._loadListNombreAstral(); + const liste = this.listeNombreAstral ?? this._loadListeNombreAstral(); let astralData = liste.find( (nombreAstral, i) => nombreAstral.index == indexDate ); if (! astralData?.nombreAstral ) { this.rebuildListeNombreAstral(); @@ -145,6 +146,7 @@ export class RdDCalendrier extends Application { } } } + this.listeNombreAstral = newList; game.settings.set("foundryvtt-reve-de-dragon", "liste-nombre-astral", this.listeNombreAstral ); } diff --git a/module/rdd-carac.js b/module/rdd-carac.js index 337212b2..c8472f46 100644 --- a/module/rdd-carac.js +++ b/module/rdd-carac.js @@ -1,4 +1,5 @@ import { Grammar } from "./grammar.js"; +import { RdDUtility } from "./rdd-utility.js"; export class RdDCarac { @@ -20,6 +21,21 @@ export class RdDCarac { RdDCarac.isChance(selectedCarac) || (RdDCarac.isReve(selectedCarac) && !competence); } + + static computeTotal(carac, beaute=undefined) { + const total = Object.values(carac).filter(c => !c.derivee) + .map(it => parseInt(it.value)) + .reduce((a, b) => a + b, 0); + const beauteSuperieur10 = Math.max((beaute ?? 10) - 10, 0); + return total + beauteSuperieur10; + } + + static setLevelUp(carac) { + Object.values(carac).forEach(it => { + it.xpNext = RdDUtility.getCaracNextXp(it.value); + it.isLevelUp = (it.xp >= it.xpNext); + }); + } /** * L’appel à la chance n’est possible que pour recommencer les jets d’actions physiques : diff --git a/module/rdd-combat.js b/module/rdd-combat.js index dafda8ed..7988632c 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"); @@ -141,6 +141,7 @@ export class RdDCombatManager extends Combat { if (arme.data.equipe) { armesEquipe.push(arme); let comp = competences.find(c => c.name == arme.data.competence); + arme.data.niveau = comp.data.niveau; arme.data.initiative = RdDCombatManager.calculInitiative(arme.data.niveau, carac[comp.data.defaut_carac].value); // Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence if (arme.data.unemain && !arme.data.deuxmains) { @@ -211,7 +212,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 +726,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 +734,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 +1110,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 +1127,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 +1249,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-commands.js b/module/rdd-commands.js index b085c758..8a091058 100644 --- a/module/rdd-commands.js +++ b/module/rdd-commands.js @@ -23,6 +23,8 @@ export class RdDCommands { rddCommands.registerCommand({ path: ["/aide"], func: (content, msg, params) => rddCommands.help(msg), descr: "Affiche l'aide pour toutes les commandes" }); rddCommands.registerCommand({ path: ["/help"], func: (content, msg, params) => rddCommands.help(msg), descr: "Affiche l'aide pour toutes les commandes" }); rddCommands.registerCommand({ path: ["/table", "queues"], func: (content, msg, params) => RdDRollTables.getQueue(true), descr: "Tire une Queue de Dragon" }); + rddCommands.registerCommand({ path: ["/table", "ideefixe"], func: (content, msg, params) => RdDRollTables.getIdeeFixe(true), descr: "Tire une Idée fixe" }); + rddCommands.registerCommand({ path: ["/table", "desir"], func: (content, msg, params) => RdDRollTables.getDesirLancinant(true), descr: "Tire un Désir Lancinant" }); rddCommands.registerCommand({ path: ["/table", "ombre"], func: (content, msg, params) => RdDRollTables.getOmbre(true), descr: "Tire une Ombre de Dragon" }); rddCommands.registerCommand({ path: ["/table", "tetehr"], func: (content, msg, params) => RdDRollTables.getTeteHR(true), descr: "Tire une Tête de Dragon pour Hauts Revants" }); rddCommands.registerCommand({ path: ["/table", "tete"], func: (content, msg, params) => RdDRollTables.getTete(true), descr: "Tire une Tête de Dragon" }); @@ -255,7 +257,7 @@ export class RdDCommands { if (params && (params.length == 1 || params.length == 2)) { let to = params.length == 1 ? Number(params[0]) : Number(params[1]); let from = params.length == 1 ? to - 1 : Number(params[0]); - RdDCommands._chatAnswer(msg, `Coût pour passer une compétence de ${from} à ${to}: ${RdDItemCompetence.getDeltaXp(from, to)}`); + RdDCommands._chatAnswer(msg, `Coût pour passer une compétence de ${from} à ${to}: ${RdDItemCompetence.computeDeltaXP(from, to)}`); } else { return false; diff --git a/module/rdd-compendium-organiser.js b/module/rdd-compendium-organiser.js index ad7e1ea2..0901d8bb 100644 --- a/module/rdd-compendium-organiser.js +++ b/module/rdd-compendium-organiser.js @@ -36,15 +36,15 @@ export class RddCompendiumOrganiser { Hooks.on('renderCompendium', async (pack, html, data) => RddCompendiumOrganiser.onRenderCompendium(pack, html, data)) } - static async onRenderCompendium(pack, html, data) { - console.log('onRenderCompendium', pack, html, data); + static async onRenderCompendium(compendium, html, data) { + console.log('onRenderCompendium', compendium, html, data); + let pack = compendium.collection if (pack.metadata.system === 'foundryvtt-reve-de-dragon') { const content = await pack.getContent(); - + html.find('.directory-item').each((i, element) => { - let entity = content.find(it => it._id === element.dataset.entryId); - - if (entity?.entity === 'Actor' || entity?.entity === 'Item') { + let entity = pack.get(element.dataset.documentId); + if (entity?.entity === 'Item') { const typeName = typeDisplayName[entity.data.type] ?? Misc.upperFirst(entity.data.type); RddCompendiumOrganiser.insertEntityType(element, typeName); } 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-main.js b/module/rdd-main.js index 2b7d2e43..1c45db7a 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -133,7 +133,8 @@ Hooks.once("init", async function () { /* -------------------------------------------- */ // Define custom Entity classes - CONFIG.Actor.entityClass = RdDActor; + CONFIG.Actor.documentClass = RdDActor; + //CONFIG.Actor.entityClass = RdDActor; CONFIG.RDD = { resolutionTable: RdDResolutionTable.resolutionTable, carac_array: RdDUtility.getCaracArray(), @@ -150,7 +151,8 @@ Hooks.once("init", async function () { Actors.registerSheet("foundryvtt-reve-de-dragon", RdDActorEntiteSheet, { types: ["entite"], makeDefault: true }); Items.unregisterSheet("core", ItemSheet); Items.registerSheet("foundryvtt-reve-de-dragon", RdDItemSheet, { makeDefault: true }); - CONFIG.Combat.entityClass = RdDCombatManager; + //CONFIG.Combat.entityClass = RdDCombatManager; + CONFIG.Combat.documentClass = RdDCombatManager; // préparation des différents modules RdDCommands.init(); @@ -171,7 +173,7 @@ function messageDeBienvenue() { if (game.user.isGM) { ChatUtility.removeChatMessageContaining('
'); ChatMessage.create({ - user: game.user._id, + user: game.user.data._id, content: `
Bienvenue dans le Rêve des Dragons !
Vous trouverez quelques informations pour démarrer dans ce document : @Compendium[foundryvtt-reve-de-dragon.rappel-des-regles.7uGrUHGdPu0EmIu2]{Documentation MJ/Joueurs}
La commande /aide dans le chat permet de voir les commandes spécifiques à Rêve de Dragon.
diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 079fc277..a50b5a53 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-rolltables.js b/module/rdd-rolltables.js index 957c130a..74d06152 100644 --- a/module/rdd-rolltables.js +++ b/module/rdd-rolltables.js @@ -48,14 +48,22 @@ export class RdDRollTables { static async getQueue(toChat = false) { let queue = await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat); if (queue.name.toLowerCase().includes('lancinant') ) { - queue = await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat); + return await RdDRollTables.getDesirLancinant(toChat); } if (queue.name.toLowerCase().includes('fixe') ) { - queue = await RdDRollTables.drawItemFromRollTable("Idées fixes", toChat); + return await RdDRollTables.getIdeeFixe(toChat); } return queue; } + static async getDesirLancinant(toChat = false) { + return await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat); + } + + static async getIdeeFixe(toChat = false) { + return await RdDRollTables.drawItemFromRollTable("Idées fixes", toChat); + } + /* -------------------------------------------- */ static async getTeteHR(toChat = false) { return await RdDRollTables.drawItemFromRollTable("Têtes de Dragon pour haut-rêvants", toChat); diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index a3bcff7e..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()); } /* -------------------------------------------- */ @@ -108,6 +108,11 @@ export class RdDTMRDialog extends Dialog { this._createTokens(); } + removeToken(tmr, casetmr) { + this._removeTokens(t => t.coordTMR() == tmr.coord && t.caseSpeciale?._id == casetmr._id); + this.updateTokens() + } + /* -------------------------------------------- */ _getTokensCasesTmr() { return this.casesSpeciales.map(c => this._tokenCaseSpeciale(c)).filter(token => token); @@ -142,7 +147,7 @@ export class RdDTMRDialog extends Dialog { async activateListeners(html) { super.activateListeners(html); - document.getElementById("tmrrow1").insertCell(1).append(this.pixiApp.view); + document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view); if (this.viewOnly) { html.find('#lancer-sort').remove(); @@ -168,7 +173,6 @@ export class RdDTMRDialog extends Dialog { let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord); await this.manageRencontre(tmr, () => { this.postRencontre(tmr); - this.actor.displayTMRQueueSouffleInformation(); }); } @@ -176,7 +180,7 @@ export class RdDTMRDialog extends Dialog { updateValuesDisplay() { let ptsreve = document.getElementById("tmr-pointsreve-value"); ptsreve.innerHTML = this.actor.data.data.reve.reve.value; - + console.log( this.actor.data.data ); let tmrpos = document.getElementById("tmr-pos"); let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord); tmrpos.innerHTML = this.actor.data.data.reve.tmrpos.coord + " (" + tmr.label + ")"; @@ -300,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, @@ -427,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, @@ -498,9 +500,7 @@ export class RdDTMRDialog extends Dialog { } async _resultatMaitriseCaseHumide(rollData) { - if (rollData.rolled.isETotal) { - rollData.souffle = await this.actor.ajouterSouffle({ chat: false }); - } + await this.souffleSiEchecTotal(rollData); this.toclose = rollData.rolled.isEchec; if (rollData.rolled.isSuccess && rollData.double) { rollData.previous = { rolled: rollData.rolled, ajustements: rollData.ajustements }; @@ -518,6 +518,12 @@ export class RdDTMRDialog extends Dialog { } } + async souffleSiEchecTotal(rollData) { + if (rollData.rolled.isETotal) { + rollData.souffle = await this.actor.ajouterSouffle({ chat: false }); + } + } + /* -------------------------------------------- */ isCaseHumide(tmr) { if (!(TMRUtility.isCaseHumide(tmr) || this.isCaseHumideAdditionelle(tmr))) { @@ -558,16 +564,29 @@ export class RdDTMRDialog extends Dialog { await this._conquerir(tmr, { difficulte: -9, action: 'Conquérir la cité', - onConqueteReussie: r => EffetsDraconiques.fermetureCites.onConquete(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)), - onConqueteEchec: r => this.close(), + onConqueteReussie: r => EffetsDraconiques.fermetureCites.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)), + onConqueteEchec: r => { + this.souffleSiEchecTotal(rollData); + this.close() + }, canClose: false }); } } - - removeToken(tmr, casetmr) { - this._removeTokens(t => t.coordTMR() == tmr.coord && t.caseSpeciale?._id == casetmr._id); - this.updateTokens() + /* -------------------------------------------- */ + async purifierPeriple(tmr) { + if (EffetsDraconiques.periple.find(this.casesSpeciales, tmr.coord)) { + await this._conquerir(tmr, { + difficulte: EffetsDraconiques.periple.getDifficulte(tmr), + action: 'Purifier ' + TMRUtility.getTMRDescr(tmr.coord), + onConqueteReussie: r => EffetsDraconiques.periple.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)), + onConqueteEchec: r => { + this.souffleSiEchecTotal(rollData); + this.close() + }, + canClose: false + }); + } } /* -------------------------------------------- */ @@ -576,8 +595,8 @@ export class RdDTMRDialog extends Dialog { await this._conquerir(tmr, { difficulte: -7, action: 'Conquérir', - onConqueteReussie: r => EffetsDraconiques.conquete.onConquete(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)), - onConqueteEchec: r => { }, + onConqueteReussie: r => EffetsDraconiques.conquete.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)), + onConqueteEchec: r => this.close(), canClose: false }); } @@ -639,8 +658,9 @@ export class RdDTMRDialog extends Dialog { dialog.render(true); } - async validerPelerinage(tmr) { - await EffetsDraconiques.pelerinage.onFinPelerinage(this.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)); + async validerVisite(tmr) { + await EffetsDraconiques.pelerinage.onVisiteSupprimer(this.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)); + await EffetsDraconiques.urgenceDraconique.onVisiteSupprimer(this.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)); } @@ -649,11 +669,12 @@ export class RdDTMRDialog extends Dialog { let sortReserveList = TMRUtility.getSortReserveList(this.sortsReserves, coord); if (sortReserveList.length > 0) { - if (EffetsDraconiques.isSortImpossible(this.actor)) { + if (EffetsDraconiques.isSortReserveImpossible(this.actor)) { ui.notifications.error("Une queue ou un souffle vous empèche de déclencher de sort!"); return; } - if (EffetsDraconiques.isReserveEnSecurite(this.actor) || this.isReserveExtensible(coord)) { + if (!EffetsDraconiques.isUrgenceDraconique(this.actor) && + (EffetsDraconiques.isReserveEnSecurite(this.actor) || this.isReserveExtensible(coord))) { let msg = "Vous êtes sur une case avec un Sort en Réserve. Grâce à votre Tête Reserve en Sécurité ou Réserve Exensible, vous pouvez contrôler le déclenchement. Cliquez si vous souhaitez le déclencher :
- Encaisser des dommages + Encaisser des dommages Remise à neuf
- {{data.blessures.resume}} + {{calc.blessures.resume}}
- {{#if data.surprise}}{{data.surprise}}! {{/if}} + {{#if calc.surprise}}{{calc.surprise}}! {{/if}} {{#if actor.effects}} {{#each actor.effects as |effect key|}} {{effect.label}} {{/each}} - {{#if data.isGM}} - (enlever tout) + {{#if options.isGM}} + (enlever tout) {{/if}} {{else}} Aucun effet actif @@ -53,12 +54,12 @@
    - {{#each data.carac as |carac key|}} + {{#each carac as |carac key|}}
  1. {{#if carac.isTaille}} - {{carac.label}} + {{carac.label}} {{else}} - {{carac.label}} {{/if}} Total Caractéristiques - {{data.caracSum}} + {{calc.caracTotal}}
@@ -113,18 +114,16 @@
    - {{#each data.competencecreature as |comp key|}} + {{#each competences as |comp key|}}
  1. {{comp.name}} - -
    @@ -199,9 +198,9 @@ {{!-- Equipment Tab --}}
    - Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.attributs.encombrement.value}} {{data.surEncombrementMessage}} - + Encombrement total/max : {{numberFormat calc.encTotal decimals=1}} / {{data.attributs.encombrement.value}} {{armes}} - Créer un objet - {{#if data.isGM}} + {{#if options.isGM}} - Vider tout les conteneurs {{/if}}
      @@ -214,14 +213,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 1f03d5cd..c80439a8 100644 --- a/templates/actor-entite-sheet.html +++ b/templates/actor-entite-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}} {{!-- Sheet Header --}} @@ -9,7 +10,7 @@
    - Encaisser des dommages + Encaisser des dommages Remise à neuf
    @@ -71,18 +72,16 @@
      - {{#each data.competencecreature as |comp key|}} + {{#each competences as |comp key|}}
    1. {{comp.name}} - -
      diff --git a/templates/actor-humanoide-sheet.html b/templates/actor-humanoide-sheet.html deleted file mode 100644 index 39126bc7..00000000 --- a/templates/actor-humanoide-sheet.html +++ /dev/null @@ -1,230 +0,0 @@ - - - {{!-- Sheet Header --}} -
      - -
      -
      -

      -
      -
      -
      - Encaisser des dommages - Remise à neuf -
      -
      -
      -
      - {{data.blessures.resume}} -
      -
      -
      -
      - - {{!-- Sheet Tab Navigation --}} - - - {{!-- Sheet Body --}} -
      - - {{!-- Carac Tab --}} -
      -
      -
      -
        - {{#each data.carac as |carac key|}} -
      1. - {{#if carac.isTaille}} - {{carac.label}} - {{else}} - {{carac.label}} - {{/if}} - -
      2. - {{/each}} -
      3. - Total Caractéristiques - {{data.caracSum}} -
      4. -
      -
      -
      -
        - {{#each data.attributs as |attr key|}} -
      1. - {{attr.label}} : - -
      2. - {{/each}} -
      3. - Vie : - / - -
      4. -
      5. - Endurance : - / - -
      6. -
      7. - Sonné : - - -
      8. -
      9. - Etat Général : - {{data.compteurs.etat.value}} -
      10. -
      -
      -
      -
      - - {{!-- Compétences Tab --}} -
      -
      -
      -
        - {{#each data.competencecreature as |comp key|}} -
      1. - - {{comp.name}} - - - -
        - - -
        -
      2. - {{/each}} -
      -
      -
      -
      - - {{!-- blessures Tab --}} -
      - Blessures Légeres : -
      - {{#each data.blessures.legeres.liste as |bless key|}} -
    2. - {{#if bless.active}}{{else}}{{/if}} - Premiers soins - - Soins complets - - Jours - - - Loc. -
    3. - {{/each}} -
      - Blessures Graves : -
      - {{#each data.blessures.graves.liste as |bless key|}} -
    4. - {{#if bless.active}}{{else}}{{/if}} - Premiers soins - - Soins complets - - Jours - - - Loc. -
    5. - {{/each}} -
      - Blessure Critique : -
      - {{#each data.blessures.critiques.liste as |bless key|}} -
    6. - {{#if bless.active}}{{else}}{{/if}} - Premiers soins - - Soins complets - - Jours - - - Loc. -
    7. -
    8. - {{/each}} -
    -
    - - {{!-- Equipment Tab --}} -
    - Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.attributs.encombrement.value}} -
      -
    1. - Nom - Q. - Enc. - Equiper - Editer/Suppr. -
    2. - {{#each data.objets as |item id|}} - {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} -
    3. - - {{item.name}} - {{item.data.quantite}} - {{numberFormat item.data.encTotal decimals=2}} - -
    4. - {{/if}} - {{/unless}} - {{/each}} - {{#each data.conteneurs as |conteneur id|}} - {{buildConteneur this}} - {{/each}} -
    - - {{!-- Biography Tab --}} -
    -
    - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} -
    - {{>"systems/foundryvtt-reve-de-dragon/templates/editor-notes-mj.html"}} -
    - -
    - - - \ No newline at end of file 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 @@
  2. - {{#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 80f64dea..ba83bffa 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -1,4 +1,3 @@ -{{log "handlebar actor-sheet" this}}
    {{!-- Sheet Header --}} @@ -12,78 +11,76 @@
    - 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 : {{data.fatigue.malus}} - {{{data.fatigue.html}}} + Malus de fatigue : {{calc.fatigue.malus}} + {{{calc.fatigue.html}}} - {{data.blessures.resume}} + {{calc.blessures.resume}}
    - {{data.compteurs.etat.label}}: {{data.compteurs.etat.value}} - {{data.compteurs.surenc.label}}: {{data.compteurs.surenc.value}} + {{data.data.compteurs.etat.label}}: {{data.data.compteurs.etat.value}} + {{data.data.compteurs.surenc.label}}: {{data.data.compteurs.surenc.value}}
    - {{#if data.surprise}}{{data.surprise}}! {{/if}} + {{#if calc.surprise}}{{calc.surprise}}! {{/if}} {{#if actor.effects}} {{#each actor.effects as |effect key|}} - - {{effect.label}} - + {{effect.data.label}} {{/each}} - {{#if data.isGM}} - (enlever tout) + {{#if options.isGM}} + (enlever tout) {{/if}} {{else}} Aucun effet actif @@ -113,58 +110,58 @@
    blocker/débloquer{{#if data.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}} + src="systems/foundryvtt-reve-de-dragon/icons/{{#if @root.options.editCaracComp}}unlocked.svg{{else}}locked.svg{{/if}}" alt="blocker/débloquer" + >{{#if @root.options.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}
      - {{#each data.carac as |carac key|}} + {{#each carac as |carac key|}} {{#if carac.isLevelUp}}
    • {{else}}
    • {{/if}} {{#if carac.isTaille}} - {{carac.label}} - + {{carac.label}} +
    • {{/each}}
    • Total Caractéristiques - {{data.caracSum}} + {{calc.caracTotal}}
    • - Beauté : - + Beauté : +
    • {{#each data.attributs as |attr key|}}
    • - {{attr.label}} : + {{attr.label}} : {{#if (eq key 'protection')}} - + {{else}} {{attr.value}} {{/if}} @@ -174,17 +171,17 @@
    • - Chance actuelle - - Utiliser + Chance actuelle + + Utiliser
    • - {{#each data.compteurs as |compteur key|}} + {{#each data.data.compteurs as |compteur key|}} {{#if compteur.isChance}} {{else if compteur.isInput}}
    • {{compteur.label}} {{#if (eq compteur.label 'Ethylisme')}} - {{#select compteur.value}} {{>"systems/foundryvtt-reve-de-dragon/templates/niveau-ethylisme.html"}} {{/select}} @@ -194,13 +191,13 @@ {{/if}} {{#if compteur.isStress}} - Transformer + Transformer {{else if (eq compteur.label 'Ethylisme')}} - Jet d'Ethylisme + Jet d'Ethylisme {{else if (eq compteur.label 'Moral')}} - Jet de moral situation malheureuse - Jet de moral situation neutre - Jet de moral situation heureuse + Jet de moral situation malheureuse + Jet de moral situation neutre + Jet de moral situation heureuse {{else}} {{/if}} @@ -218,14 +215,14 @@
      @@ -233,8 +230,8 @@ Compétences de base
        - {{#each data.competenceByCategory.generale as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.generale as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
      • {{else}} @@ -250,14 +247,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
        - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
      • {{/if}} @@ -268,8 +265,8 @@ Compétences Particulières
          - {{#each data.competenceByCategory.particuliere as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.particuliere as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
        • {{else}} @@ -285,14 +282,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
          - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
        • {{/if}} @@ -302,8 +299,8 @@ Compétences Spécialisées
            - {{#each data.competenceByCategory.specialisee as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.specialisee as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
          • {{else}} @@ -319,14 +316,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
            - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
          • {{/if}} @@ -339,8 +336,8 @@ Compétences de Mêlée
              - {{#each data.competenceByCategory.melee as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.melee as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
            • {{else}} @@ -356,14 +353,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
              - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
            • {{/if}} @@ -374,8 +371,8 @@ Compétences de Tir
                - {{#each data.competenceByCategory.tir as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.tir as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
              • {{else}} @@ -391,14 +388,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
                - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
              • {{/if}} @@ -409,8 +406,8 @@ Compétences de Lancer
                  - {{#each data.competenceByCategory.lancer as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.lancer as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
                • {{else}} @@ -426,14 +423,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
                  - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
                • {{/if}} @@ -444,8 +441,8 @@ Connaissances
                    - {{#each data.competenceByCategory.connaissance as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.connaissance as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
                  • {{else}} @@ -461,14 +458,14 @@ {{else}} {{comp.name}} {{/if}} - - + +
                    - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
                  • {{/if}} @@ -479,8 +476,8 @@ Draconic
                      - {{#each data.competenceByCategory.draconic as |comp key|}} - {{#if data.showCompetence}} + {{#each competenceByCategory.draconic as |comp key|}} + {{#if visible}} {{#if comp.data.isLevelUp}}
                    • {{else}} @@ -496,15 +493,15 @@ {{else}} {{comp.name}} {{/if}} - - - + + +
                      - {{#if ../data.montrerArchetype}} - + {{#if @root.options.montrerArchetype}} + {{/if}}
                    • {{/if}} @@ -514,10 +511,10 @@
                      • Total XP compétences - {{data.competenceXPTotal}} + {{calc.competenceXPTotal}}
                      • - {{#if data.montrerArchetype}} - {{#each data.comptageArchetype as |archetype key|}} + {{#if @root.options.montrerArchetype}} + {{#each calc.comptageArchetype as |archetype key|}}
                      • @@ -534,27 +531,27 @@

                        Armes et Défenses:

                        • - Armes - Initiative - Comp. - Niveau - +dom + Armes + Initiative + Comp. + Niveau + +dom
                        • - {{#each data.combat as |arme key|}} + {{#each armes as |arme key|}}
                        • {{arme.name}} {{arme.data.initiative}} - {{arme.data.competence}} - {{numberFormat arme.data.niveau decimals=0 sign=true}} - {{numberFormat arme.data.dommages decimals=0 sign=true}} + {{arme.data.competence}} + {{numberFormat arme.data.niveau decimals=0 sign=true}} + {{numberFormat arme.data.dommages decimals=0 sign=true}}
                        • {{/each}}
                        • {{esquive.name}} - - {{numberFormat esquive.niveau decimals=0 sign=true}} - + + {{numberFormat esquive.niveau decimals=0 sign=true}} +

                        @@ -665,7 +662,7 @@

                        Oeuvres diverses :

                        Jeux :

                        Recettes Alchimiques

                          - {{#each data.recettesAlchimiques as |recette id|}} + {{#each items.recettesAlchimiques as |recette id|}}
                        • {{recette.name}}
                          @@ -730,7 +727,7 @@

                        Tâches

                        Créer une nouvelle Tâche
                          - {{#each data.taches as |tache id|}} + {{#each items.taches as |tache id|}}
                        • {{tache.name}} ({{tache.data.points_de_tache_courant}}/{{tache.data.points_de_tache}})
                          @@ -748,37 +745,37 @@

                          Haut rêve:

                          • - Position en TMR : + Position en TMR : - {{#if data.isGM}} - + {{#if options.isGM}} + {{else}} - {{data.reve.tmrpos.coord}} + {{data.data.reve.tmrpos.coord}} {{/if}}
                          • - Seuil de Rêve : + Seuil de Rêve : - {{#if data.isGM}} - + {{#if options.isGM}} + {{else}} - {{data.reve.seuil.value}} + {{data.data.reve.seuil.value}} {{/if}}
                          • - Refoulement : + Refoulement : - {{#if data.isGM}} - + {{#if options.isGM}} + {{else}} - {{data.reve.refoulement.value}} + {{data.data.reve.refoulement.value}} {{/if}}
                          • - Astrologie : Nombres Astraux + Astrologie : Nombres Astraux
                          @@ -786,7 +783,7 @@

                          Sorts:

                            - {{#each data.sorts as |mysort key|}} + {{#each items.sorts as |mysort key|}}
                          • {{mysort.name}} {{mysort.data.draconic}} / {{mysort.data.difficulte}} @@ -801,7 +798,7 @@

                            Sorts en Réserve:

                              - {{#each data.sortReserve as |reserve key|}} + {{#each tmr.sortsReserve as |reserve key|}}
                            • {{reserve.sort.name}} - {{reserve.coord}}
                            • @@ -812,7 +809,7 @@

                              Méditations:

                                - {{#each data.meditations as |meditation key|}} + {{#each items.meditations as |meditation key|}}
                              • {{meditation.name}} - {{meditation.data.competence}}
                                @@ -827,7 +824,7 @@

                                Cases Spéciales:

                                  - {{#each data.caseSpeciales as |casetmr key|}} + {{#each tmr.caseSpeciales as |casetmr key|}}
                                • {{casetmr.name}}
                                  @@ -841,7 +838,7 @@

                                  Rencontres présentes:

                                    - {{#each data.rencontres as |rencontre key|}} + {{#each tmr.rencontres as |rencontre key|}}
                                  • {{rencontre.rencontre.name}} - {{rencontre.coord}} ({{rencontre.rencontre.date}} - {{rencontre.rencontre.heure}})
                                    @@ -856,7 +853,7 @@

                                    Queues:

                                      - {{#each data.queues as |queue key|}} + {{#each items.queues as |queue key|}}
                                    • {{queue.name}}
                                      @@ -867,7 +864,7 @@

                                    Souffles:

                                      - {{#each data.souffles as |souffle key|}} + {{#each items.souffles as |souffle key|}}
                                    • {{souffle.name}}
                                      @@ -878,7 +875,7 @@

                                    Tetes:

                                      - {{#each data.tetes as |tete key|}} + {{#each items.tetes as |tete key|}}
                                    • {{tete.name}}
                                      @@ -889,7 +886,7 @@

                                    Ombres de Thanatos:

                                      - {{#each data.ombres as |ombre key|}} + {{#each items.ombres as |ombre key|}}
                                    • {{ombre.name}}
                                      @@ -905,12 +902,12 @@

                                      Argent et Monnaies

                                        - {{#each data.monnaie as |piece id|}} + {{#each items.monnaie as |piece id|}}
                                      • {{piece.name}} {{piece.data.quantite}} - +- + +-
                                        @@ -921,26 +918,26 @@

                                        Equipement porté

                                        - Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.attributs.encombrement.value}} {{data.surEncombrementMessage}} - - Estimation de l'équipement : {{numberFormat data.prixTotalEquipement decimals=2}} Sols + Encombrement total/max : {{numberFormat calc.encTotal decimals=1}} / {{data.data.attributs.encombrement.value}} {{calc.surEncombrementMessage}} - + Estimation de l'équipement : {{numberFormat calc.prixTotalEquipement decimals=2}} Sols
                                        Créer un objet - {{#if data.isGM}} + {{#if options.isGM}} - Vider tout les conteneurs {{/if}}
                                        • - Nom - Q. - Enc. - Equiper/Editer/Suppr. + Nom + Q. + Enc. + Equiper/Editer/Suppr.
                                        • - {{#each data.objets as |item id|}} + {{#each items.objets as |item id|}} {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} + {{#if (ne item.data.type 'conteneur')}}
                                        • {{item.name}} @@ -955,14 +952,14 @@ {{/if}} {{/unless}} {{/each}} - {{#each data.conteneurs as |conteneur id|}} + {{#each items.conteneurs as |conteneur id|}} {{buildConteneur this}} {{/each}}

                                        Montures

                                          - {{#each data.monturesList as |monture id|}} + {{#each subacteurs.montures as |monture id|}}
                                        • {{monture.name}} @@ -975,7 +972,7 @@

                                          Véhicules

                                            - {{#each data.vehiculesList as |vehicule id|}} + {{#each subacteurs.vehicules as |vehicule id|}}
                                          • {{vehicule.name}} @@ -990,7 +987,7 @@

                                            Suivants

                                              - {{#each data.suivantsList as |suivant id|}} + {{#each subacteurs.suivants as |suivant id|}}
                                            • {{suivant.name}} @@ -1008,40 +1005,40 @@
                                              • -
                                              • -
                                              • -
                                              • -
                                              • -
                                              • -
                                              • -
                                              • -
                                              • -
                                              diff --git a/templates/actor-vehicule-sheet.html b/templates/actor-vehicule-sheet.html index 4b7bfcde..c166c585 100644 --- a/templates/actor-vehicule-sheet.html +++ b/templates/actor-vehicule-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar: actor-vehicule-sheet" this}} {{!-- Sheet Header --}} @@ -27,39 +28,39 @@
                                              1. Catégorie - + {{#select data.data.categorie}} {{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html"}} {{/select}}
                                              2. Résistance - +
                                              3. Structure - +
                                              4. Vitesse - +
                                              5. Bonus - +
                                              6. Manoeuvrabilité - +
                                              7. Equipage - +
                                              8. Capacité d'Encombrement - +
                                        @@ -68,9 +69,9 @@ {{!-- Equipment Tab --}}
                                        - Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.capacite_encombrement}} {{data.surEncombrementMessage}} - + Encombrement total/max : {{numberFormat calc.encTotal decimals=1}} / {{data.data.capacite_encombrement}} {{calc.surEncombrementMessage}} - Créer un objet - {{#if data.isGM}} + {{#if options.isGM}} - Vider tout les conteneurs {{/if}}
                                          @@ -81,16 +82,16 @@ Equiper Editer/Suppr. - {{#each data.objets as |item id|}} + {{#each items.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}} @@ -98,7 +99,7 @@ {{/if}} {{/unless}} {{/each}} - {{#each data.conteneurs as |conteneur id|}} + {{#each items.conteneurs as |conteneur id|}} {{buildConteneur this}} {{/each}}
                                        @@ -108,7 +109,7 @@ {{!-- Biography Tab --}}
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.data.description" button=true owner=owner editable=editable}}
                                        {{>"systems/foundryvtt-reve-de-dragon/templates/editor-notes-mj.html"}}
                                        diff --git a/templates/calendar-astrologie-template.html b/templates/calendar-astrologie-template.html index aa554949..b893b1d7 100644 --- a/templates/calendar-astrologie-template.html +++ b/templates/calendar-astrologie-template.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        diff --git a/templates/calendar-editor-template.html b/templates/calendar-editor-template.html index e28f019a..da18b215 100644 --- a/templates/calendar-editor-template.html +++ b/templates/calendar-editor-template.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        diff --git a/templates/calendar-template.html b/templates/calendar-template.html index e1d65073..2b19111e 100644 --- a/templates/calendar-template.html +++ b/templates/calendar-template.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        {{#if isGM}} diff --git a/templates/casetmr-specific-list.html b/templates/casetmr-specific-list.html index ccedfd1f..136f1f6d 100644 --- a/templates/casetmr-specific-list.html +++ b/templates/casetmr-specific-list.html @@ -1,12 +1,13 @@ + + + + + + + + + + - - - - - - - - - - + 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 c14373f1..97dc16de 100644 --- a/templates/chat-actor-competence-xp.html +++ b/templates/chat-actor-competence-xp.html @@ -1,4 +1,8 @@ -

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

                                        +{{log "handlebar" this}} +{{#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 f0f89a1e..13c3acc5 100644 --- a/templates/chat-actor-turn-summary.html +++ b/templates/chat-actor-turn-summary.html @@ -1,9 +1,13 @@ -

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

                                        +{{log "handlebar" this}} +{{#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.
                                        + {{/if}} \ No newline at end of file diff --git a/templates/chat-demande-attaque-etotal.html b/templates/chat-demande-attaque-etotal.html index 77ef3a99..6d117741 100644 --- a/templates/chat-demande-attaque-etotal.html +++ b/templates/chat-demande-attaque-etotal.html @@ -1,22 +1,24 @@ +{{log "handlebar" this}}

                                        Echec total en attaque


                                        {{#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 e6a32ad8..06273d7f 100644 --- a/templates/chat-demande-attaque-particuliere.html +++ b/templates/chat-demande-attaque-particuliere.html @@ -1,5 +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 c9d2fe76..814967e0 100644 --- a/templates/chat-demande-defense.html +++ b/templates/chat-demande-defense.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        {{#if (eq surprise 'totale')}} {{defender.name}} est totalement surpris @@ -21,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 6ceef396..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}} fait appel {{#if (gt moral 0)}}au moral{{else}}à l'énergie du déspoir{{/if}} {{#if moralDiminuer}}et échoue, diminuant son moral.{{else}} et 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-infojet.html b/templates/chat-infojet.html index 957ec522..093eaec7 100644 --- a/templates/chat-infojet.html +++ b/templates/chat-infojet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        {{rolled.caracValue}} à {{numberFormat rolled.finalLevel decimals=0 sign=true}} diff --git a/templates/chat-initiative-premier-round.html b/templates/chat-initiative-premier-round.html index 291563f8..d8e14394 100644 --- a/templates/chat-initiative-premier-round.html +++ b/templates/chat-initiative-premier-round.html @@ -1,4 +1,5 @@ -

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

                                        +{{log "handlebar" this}} +

                                        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-poesie.html b/templates/chat-poesie.html index dd1c9308..cbde58ea 100644 --- a/templates/chat-poesie.html +++ b/templates/chat-poesie.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}} {{#if description}}
                                        diff --git a/templates/chat-rencontre-tmr.html b/templates/chat-rencontre-tmr.html index 4d49510d..91a677e6 100644 --- a/templates/chat-rencontre-tmr.html +++ b/templates/chat-rencontre-tmr.html @@ -1,6 +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 0cb65da3..7b3efdae 100644 --- a/templates/chat-resultat-accorder-cauchemar.html +++ b/templates/chat-resultat-accorder-cauchemar.html @@ -1,10 +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 38273c82..d55fd152 100644 --- a/templates/chat-resultat-alchimie.html +++ b/templates/chat-resultat-alchimie.html @@ -1,13 +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 c022da52..dbbf1bd8 100644 --- a/templates/chat-resultat-appelchance.html +++ b/templates/chat-resultat-appelchance.html @@ -1,6 +1,8 @@ -

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

                                        +{{log "handlebar" this}} +{{#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 3f3ed617..c3c5b28d 100644 --- a/templates/chat-resultat-attaque.html +++ b/templates/chat-resultat-attaque.html @@ -1,5 +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 6af6e9d6..d9c6eca7 100644 --- a/templates/chat-resultat-chant.html +++ b/templates/chat-resultat-chant.html @@ -1,14 +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 8a46b0a8..1ffd3db5 100644 --- a/templates/chat-resultat-competence.html +++ b/templates/chat-resultat-competence.html @@ -1,6 +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 9d12528b..9c403b59 100644 --- a/templates/chat-resultat-danse.html +++ b/templates/chat-resultat-danse.html @@ -1,14 +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 86fa9811..1597f816 100644 --- a/templates/chat-resultat-encaissement.html +++ b/templates/chat-resultat-encaissement.html @@ -1,12 +1,14 @@ +{{log "handlebar" this}} {{#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) @@ -15,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 @@ -41,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 e6aab0f0..e98e702c 100644 --- a/templates/chat-resultat-esquive.html +++ b/templates/chat-resultat-esquive.html @@ -1,5 +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 c6c374eb..1020b221 100644 --- a/templates/chat-resultat-ethylisme.html +++ b/templates/chat-resultat-ethylisme.html @@ -1,5 +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 2bc62cb6..f4f1fcbd 100644 --- a/templates/chat-resultat-general.html +++ b/templates/chat-resultat-general.html @@ -1,8 +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 6b8c01f3..4aa86937 100644 --- a/templates/chat-resultat-jeu.html +++ b/templates/chat-resultat-jeu.html @@ -1,14 +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 e5f4fa6f..1199bc18 100644 --- a/templates/chat-resultat-maitrise-tmr.html +++ b/templates/chat-resultat-maitrise-tmr.html @@ -1,6 +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 91f096fb..b372234e 100644 --- a/templates/chat-resultat-meditation.html +++ b/templates/chat-resultat-meditation.html @@ -1,15 +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 0b0a6d0b..b4f55c64 100644 --- a/templates/chat-resultat-musique.html +++ b/templates/chat-resultat-musique.html @@ -1,14 +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 d7e349e5..2b05bd56 100644 --- a/templates/chat-resultat-oeuvre.html +++ b/templates/chat-resultat-oeuvre.html @@ -1,15 +1,16 @@ -

                                        {{oeuvre.data.competence}} - - {{alias}} tente d'interpréter {{oeuvre.name}} (niveau {{oeuvre.data.niveau}}) +{{log "handlebar" this}} +{{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 e6638f0e..4f838955 100644 --- a/templates/chat-resultat-parade.html +++ b/templates/chat-resultat-parade.html @@ -1,5 +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"}}
                                        @@ -7,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')}} @@ -28,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 5eb098fd..7f023005 100644 --- a/templates/chat-resultat-recettecuisine.html +++ b/templates/chat-resultat-recettecuisine.html @@ -1,14 +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 f1aa7992..ec9142f1 100644 --- a/templates/chat-resultat-reve-de-dragon.html +++ b/templates/chat-resultat-reve-de-dragon.html @@ -1,6 +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 b17920a9..5f4d9bb1 100644 --- a/templates/chat-resultat-sort.html +++ b/templates/chat-resultat-sort.html @@ -1,6 +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 b9792039..89de0467 100644 --- a/templates/chat-resultat-tache.html +++ b/templates/chat-resultat-tache.html @@ -1,6 +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 0bef2112..b37fbed2 100644 --- a/templates/chat-resultat-transformer-stress.html +++ b/templates/chat-resultat-transformer-stress.html @@ -1,5 +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 67eb084b..d3125095 100644 --- a/templates/dialog-astrologie-joueur.html +++ b/templates/dialog-astrologie-joueur.html @@ -22,7 +22,7 @@ {{/select}} - + {{!-- Sheet Body --}}
                                        diff --git a/templates/dialog-competence.html b/templates/dialog-competence.html index a099493b..a9f97692 100644 --- a/templates/dialog-competence.html +++ b/templates/dialog-competence.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                        diff --git a/templates/dialog-roll-ajustements.html b/templates/dialog-roll-ajustements.html index b249f046..cc390f03 100644 --- a/templates/dialog-roll-ajustements.html +++ b/templates/dialog-roll-ajustements.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        Ajustement Final: diff --git a/templates/dialog-roll-alchimie.html b/templates/dialog-roll-alchimie.html index 87323064..c4f301f4 100644 --- a/templates/dialog-roll-alchimie.html +++ b/templates/dialog-roll-alchimie.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                          diff --git a/templates/dialog-roll-carac.html b/templates/dialog-roll-carac.html index 95fac6ab..b3b7c0c2 100644 --- a/templates/dialog-roll-carac.html +++ b/templates/dialog-roll-carac.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                          diff --git a/templates/dialog-roll-chant.html b/templates/dialog-roll-chant.html index 6fa436b5..c8474a6d 100644 --- a/templates/dialog-roll-chant.html +++ b/templates/dialog-roll-chant.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                            diff --git a/templates/dialog-roll-danse.html b/templates/dialog-roll-danse.html index 55e44775..04469162 100644 --- a/templates/dialog-roll-danse.html +++ b/templates/dialog-roll-danse.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                              diff --git a/templates/dialog-roll-encaisser.html b/templates/dialog-roll-encaisser.html index 73244852..b99d72fc 100644 --- a/templates/dialog-roll-encaisser.html +++ b/templates/dialog-roll-encaisser.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                              diff --git a/templates/dialog-roll-ethylisme.html b/templates/dialog-roll-ethylisme.html index 2a74d639..c3bb618b 100644 --- a/templates/dialog-roll-ethylisme.html +++ b/templates/dialog-roll-ethylisme.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                              diff --git a/templates/dialog-roll-jeu.html b/templates/dialog-roll-jeu.html index 0ccf3b77..a33a8b33 100644 --- a/templates/dialog-roll-jeu.html +++ b/templates/dialog-roll-jeu.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                diff --git a/templates/dialog-roll-maitrise-tmr.html b/templates/dialog-roll-maitrise-tmr.html index 314668dc..cbf4a832 100644 --- a/templates/dialog-roll-maitrise-tmr.html +++ b/templates/dialog-roll-maitrise-tmr.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                diff --git a/templates/dialog-roll-meditation.html b/templates/dialog-roll-meditation.html index 85d089a6..5a6fd583 100644 --- a/templates/dialog-roll-meditation.html +++ b/templates/dialog-roll-meditation.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                  diff --git a/templates/dialog-roll-musique.html b/templates/dialog-roll-musique.html index faa65989..50a8759f 100644 --- a/templates/dialog-roll-musique.html +++ b/templates/dialog-roll-musique.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                    diff --git a/templates/dialog-roll-oeuvre.html b/templates/dialog-roll-oeuvre.html index f6dc0d41..03a7f14c 100644 --- a/templates/dialog-roll-oeuvre.html +++ b/templates/dialog-roll-oeuvre.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/dialog-roll-recettecuisine.html b/templates/dialog-roll-recettecuisine.html index ef52543e..551a794e 100644 --- a/templates/dialog-roll-recettecuisine.html +++ b/templates/dialog-roll-recettecuisine.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/dialog-roll-resolution.html b/templates/dialog-roll-resolution.html index a7df5ca6..0f0fc73d 100644 --- a/templates/dialog-roll-resolution.html +++ b/templates/dialog-roll-resolution.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/dialog-roll-reve-de-dragon.html b/templates/dialog-roll-reve-de-dragon.html index 6b584c51..26e7e36b 100644 --- a/templates/dialog-roll-reve-de-dragon.html +++ b/templates/dialog-roll-reve-de-dragon.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                                      Rêve de Dragon de force {{rencontre.force}}!

                                                      diff --git a/templates/dialog-roll-sort.html b/templates/dialog-roll-sort.html index c32366ef..5ca2102c 100644 --- a/templates/dialog-roll-sort.html +++ b/templates/dialog-roll-sort.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/dialog-roll-surenc.html b/templates/dialog-roll-surenc.html index ae07c1bf..3d3d9aa6 100644 --- a/templates/dialog-roll-surenc.html +++ b/templates/dialog-roll-surenc.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}} {{#if surencMalusFlag}}
                                                      diff --git a/templates/dialog-tmr.html b/templates/dialog-tmr.html index a266ccfa..a1b3a89f 100644 --- a/templates/dialog-tmr.html +++ b/templates/dialog-tmr.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                                      diff --git a/templates/editor-notes-mj.html b/templates/editor-notes-mj.html index 54566eb1..98a92ffb 100644 --- a/templates/editor-notes-mj.html +++ b/templates/editor-notes-mj.html @@ -1,6 +1,6 @@ -{{#if data.isGM}} +{{#if options.isGM}}

                                                      Notes du MJ :

                                                      - {{editor content=data.notesmj target="data.notesmj" button=true owner=owner editable=editable}} + {{editor content=data.data.notesmj target="data.data.notesmj" button=true owner=owner editable=editable}}
                                                      {{/if}} diff --git a/templates/hud-actor-attaque.html b/templates/hud-actor-attaque.html index 9d3a7926..50d895d8 100644 --- a/templates/hud-actor-attaque.html +++ b/templates/hud-actor-attaque.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/hud-actor-init.html b/templates/hud-actor-init.html index 9865510a..f2fb1e01 100644 --- a/templates/hud-actor-init.html +++ b/templates/hud-actor-init.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      diff --git a/templates/item-arme-sheet.html b/templates/item-arme-sheet.html index 3d5f9a69..b2046a19 100644 --- a/templates/item-arme-sheet.html +++ b/templates/item-arme-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                                      @@ -11,83 +12,83 @@
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      - +
                                                      @@ -95,7 +96,7 @@
                                                      - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-armure-sheet.html b/templates/item-armure-sheet.html index e2bcb8af..b648e158 100644 --- a/templates/item-armure-sheet.html +++ b/templates/item-armure-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,28 +11,28 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-casetmr-sheet.html b/templates/item-casetmr-sheet.html index c6fc3ea9..d83349fd 100644 --- a/templates/item-casetmr-sheet.html +++ b/templates/item-casetmr-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,12 +11,12 @@
                                        - +
                                        @@ -23,7 +24,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-chant-sheet.html b/templates/item-chant-sheet.html index 1d9af9ff..3d97461c 100644 --- a/templates/item-chant-sheet.html +++ b/templates/item-chant-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,16 +11,16 @@
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-competence-sheet.html b/templates/item-competence-sheet.html index 17fefbb0..fdedcc11 100644 --- a/templates/item-competence-sheet.html +++ b/templates/item-competence-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -17,23 +18,23 @@
                                        - +
                                        - +
                                        @@ -41,29 +42,29 @@
                                        - +
                                        - {{#if (eq data.categorie 'draconic')}} + {{#if (eq data.data.categorie 'draconic')}}
                                        - +
                                        {{/if}}
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-competencecreature-sheet.html b/templates/item-competencecreature-sheet.html index 11760d4f..c14a9fd7 100644 --- a/templates/item-competencecreature-sheet.html +++ b/templates/item-competencecreature-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,39 +11,39 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-conteneur-sheet.html b/templates/item-conteneur-sheet.html index 6f291219..48017308 100644 --- a/templates/item-conteneur-sheet.html +++ b/templates/item-conteneur-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,24 +11,24 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-danse-sheet.html b/templates/item-danse-sheet.html index ea410cf4..a454d82f 100644 --- a/templates/item-danse-sheet.html +++ b/templates/item-danse-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-herbe-sheet.html b/templates/item-herbe-sheet.html index baec3279..b8d6fba8 100644 --- a/templates/item-herbe-sheet.html +++ b/templates/item-herbe-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,24 +12,24 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        @@ -36,7 +37,7 @@
                                        @@ -44,7 +45,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-ingredient-sheet.html b/templates/item-ingredient-sheet.html index 96d9e54b..bdf8235d 100644 --- a/templates/item-ingredient-sheet.html +++ b/templates/item-ingredient-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,29 +12,29 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        @@ -41,7 +42,7 @@
                                        @@ -49,7 +50,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-jeu-sheet.html b/templates/item-jeu-sheet.html index 11649435..9b4a8409 100644 --- a/templates/item-jeu-sheet.html +++ b/templates/item-jeu-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-livre-sheet.html b/templates/item-livre-sheet.html index 88d60e54..cb2936d4 100644 --- a/templates/item-livre-sheet.html +++ b/templates/item-livre-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,12 +11,12 @@
                                        - +
                                        +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        {{#if isOwned}}
                                        @@ -62,7 +63,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-maladie-sheet.html b/templates/item-maladie-sheet.html index 8c2601d9..8c48adbd 100644 --- a/templates/item-maladie-sheet.html +++ b/templates/item-maladie-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,24 +11,24 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-meditation-sheet.html b/templates/item-meditation-sheet.html index 0b484acb..cf971b7b 100644 --- a/templates/item-meditation-sheet.html +++ b/templates/item-meditation-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        +
                                        - +
                                        - +
                                        - +
                                        - +
                                        @@ -58,7 +59,7 @@ {{#if isGM}} {{else}} - + {{/if}}
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-monnaie-sheet.html b/templates/item-monnaie-sheet.html index 3133a691..9a72d4e7 100644 --- a/templates/item-monnaie-sheet.html +++ b/templates/item-monnaie-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,19 +11,19 @@
                                        - +
                                        {{#if isGM}} - + {{else}} {{/if}}
                                        - +
                                        diff --git a/templates/item-munition-sheet.html b/templates/item-munition-sheet.html index eed1dc1d..c165a038 100644 --- a/templates/item-munition-sheet.html +++ b/templates/item-munition-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,24 +11,24 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-musique-sheet.html b/templates/item-musique-sheet.html index 1d9af9ff..3d97461c 100644 --- a/templates/item-musique-sheet.html +++ b/templates/item-musique-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,16 +11,16 @@
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-objet-sheet.html b/templates/item-objet-sheet.html index 89a40b0f..4af07c08 100644 --- a/templates/item-objet-sheet.html +++ b/templates/item-objet-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,28 +11,28 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-oeuvre-sheet.html b/templates/item-oeuvre-sheet.html index 82f2c2b0..5e312b31 100644 --- a/templates/item-oeuvre-sheet.html +++ b/templates/item-oeuvre-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        @@ -19,7 +20,7 @@
                                        +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-ombre-sheet.html b/templates/item-ombre-sheet.html index 216e1638..fe9450f5 100644 --- a/templates/item-ombre-sheet.html +++ b/templates/item-ombre-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,11 +11,11 @@
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-poison-sheet.html b/templates/item-poison-sheet.html index 8c2601d9..8c48adbd 100644 --- a/templates/item-poison-sheet.html +++ b/templates/item-poison-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,24 +11,24 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-potion-sheet.html b/templates/item-potion-sheet.html index a78d1e35..6082d104 100644 --- a/templates/item-potion-sheet.html +++ b/templates/item-potion-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,20 +11,20 @@
                                        - +
                                        - +
                                        - +
                                        @@ -31,7 +32,7 @@
                                        @@ -39,7 +40,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-queue-sheet.html b/templates/item-queue-sheet.html index 4ffbc24c..5f003fa7 100644 --- a/templates/item-queue-sheet.html +++ b/templates/item-queue-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,12 +11,12 @@
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-recettealchimique-sheet.html b/templates/item-recettealchimique-sheet.html index c8211a92..e567126a 100644 --- a/templates/item-recettealchimique-sheet.html +++ b/templates/item-recettealchimique-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,36 +11,36 @@
                                        - +
                                        - {{editor content=data.manipulation_update target="data.manipulation" button=true owner=owner editable=editable}} + {{editor content=data.data.manipulation_update target="data.manipulation" button=true owner=owner editable=editable}}
                                        - {{editor content=data.utilisation target="data.utilisation" button=true owner=owner editable=editable}} + {{editor content=data.data.utilisation target="data.utilisation" button=true owner=owner editable=editable}}
                                        - {{editor content=data.enchantement target="data.enchantement" button=true owner=owner editable=editable}} + {{editor content=data.data.enchantement target="data.enchantement" button=true owner=owner editable=editable}}
                                        - {{editor content=data.sureffet target="data.sureffet" button=true owner=owner editable=editable}} + {{editor content=data.data.sureffet target="data.sureffet" button=true owner=owner editable=editable}}
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-recettecuisine-sheet.html b/templates/item-recettecuisine-sheet.html index 2d64730c..4628c3e9 100644 --- a/templates/item-recettecuisine-sheet.html +++ b/templates/item-recettecuisine-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -10,34 +11,34 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.ingredients target="data.ingredients" button=true owner=owner editable=editable}} + {{editor content=data.data.ingredients target="data.ingredients" button=true owner=owner editable=editable}}
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-rencontresTMR-sheet.html b/templates/item-rencontresTMR-sheet.html index 3f153150..c3259c82 100644 --- a/templates/item-rencontresTMR-sheet.html +++ b/templates/item-rencontresTMR-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-sheet.html b/templates/item-sheet.html deleted file mode 100644 index c8acc8e5..00000000 --- a/templates/item-sheet.html +++ /dev/null @@ -1,64 +0,0 @@ - -
                                        - -
                                        -

                                        -
                                        - - -
                                        -
                                        - - -
                                        -
                                        -
                                        - - {{!-- Sheet Tab Navigation --}} - - - {{!-- Sheet Body --}} -
                                        - - {{!-- Description Tab --}} -
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} -
                                        - - {{!-- Attributes Tab --}} -
                                        -
                                        - Attribute Key - Value - Label - Data Type - -
                                        - -
                                          - {{#each data.attributes as |attr key|}} -
                                        1. - - {{#if attr.isCheckbox}} - - {{else}} - - {{/if}} - - - -
                                        2. - {{/each}} -
                                        -
                                        -
                                        - diff --git a/templates/item-sort-sheet.html b/templates/item-sort-sheet.html index a77801a0..03a1a86e 100644 --- a/templates/item-sort-sheet.html +++ b/templates/item-sort-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        @@ -19,7 +20,7 @@
                                        +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        {{#if owner}} {{#each bonusCaseList as |bcData key|}} @@ -77,7 +78,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-souffle-sheet.html b/templates/item-souffle-sheet.html index 3f153150..c3259c82 100644 --- a/templates/item-souffle-sheet.html +++ b/templates/item-souffle-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-tache-sheet.html b/templates/item-tache-sheet.html index 1fccfcdf..782052b0 100644 --- a/templates/item-tache-sheet.html +++ b/templates/item-tache-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        - {{#select item.data.competence}} + {{#select item.data.data.competence}} {{#each competences as |competence key|}} {{/each}} @@ -30,27 +31,27 @@
                                        - +
                                        - +
                                        - +
                                        - +
                                        - +
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-tarot-sheet.html b/templates/item-tarot-sheet.html index 752b39ef..8429ec21 100644 --- a/templates/item-tarot-sheet.html +++ b/templates/item-tarot-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,12 +12,12 @@
                                        - +
                                        @@ -24,7 +25,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/item-tete-sheet.html b/templates/item-tete-sheet.html index 3f153150..c3259c82 100644 --- a/templates/item-tete-sheet.html +++ b/templates/item-tete-sheet.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                        @@ -11,7 +12,7 @@
                                        - {{editor content=data.description target="data.description" button=true owner=owner editable=editable}} + {{editor content=data.data.description target="data.description" button=true owner=owner editable=editable}}
                                        diff --git a/templates/post-item.html b/templates/post-item.html index 60bccdd1..fcb03ae1 100644 --- a/templates/post-item.html +++ b/templates/post-item.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                        {{name}}

                                        {{#if img}} diff --git a/templates/regles-optionelles.html b/templates/regles-optionelles.html index 47e97354..f91585c3 100644 --- a/templates/regles-optionelles.html +++ b/templates/regles-optionelles.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}

                                        Règles de combat

                                          diff --git a/templates/status-effects-settings.html b/templates/status-effects-settings.html index a6862f12..40dc7a23 100644 --- a/templates/status-effects-settings.html +++ b/templates/status-effects-settings.html @@ -1,3 +1,4 @@ +{{log "handlebar" this}}
                                            {{#each effects as |effect key|}}