diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 70d482bf..dce4e440 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -194,6 +194,12 @@ export class RdDActorSheet extends ActorSheet { new Dialog( dialogData ).render(true); } + /* -------------------------------------------- */ + async createEmptyTache( ) { + let emptyTache = await Item.create( { name: 'Nouvelle tache', type: 'tache'} ); + await this.actor.createOwnedItem( emptyTache.data, { renderSheet: true } ); + } + /* -------------------------------------------- */ /** @override */ activateListeners(html) { @@ -226,6 +232,9 @@ export class RdDActorSheet extends ActorSheet { this.actor.remiseANeuf(); } }); + html.find('#creer-tache').click(ev => { + this.createEmptyTache(); + }); // Blessure control html.find('.blessure-control').click(ev => { @@ -280,7 +289,12 @@ export class RdDActorSheet extends ActorSheet { let compName = event.currentTarget.text; this.actor.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 ); + }); + // Points de reve actuel html.find('.ptreve-actuel a').click((event) => { this.actor.rollCarac( 'reve-actuel' ); diff --git a/module/actor.js b/module/actor.js index b7d0885f..859bede7 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1436,6 +1436,11 @@ export class RdDActor extends Actor { ChatUtility.chatWithRollMode(chatOptions, this.name) } + /* -------------------------------------------- */ + getCompetenceList() { + return this.data.items.filter( (item) => item.type == 'competence'); + } + /* -------------------------------------------- */ async rollCarac( caracName ) { let rollData = { @@ -1503,6 +1508,55 @@ export class RdDActor extends Actor { dialog.render(true); } + /* -------------------------------------------- */ + getTache ( id ) { + return this.data.items.find( item => item._id == id ); + } + + /* -------------------------------------------- */ + async rollTache( id ) { + let tache = duplicate( this.getTache( id ) ); + let competence = duplicate(this.getCompetence(tache.data.competence)); + competence.data.defaut_carac = tache.data.carac; // Patch ! + let rollData = { + competence: competence, + needSignificative : this.data.data.sante.sonne.value, + tache: tache, + diffConditions: tache.data.difficulte, + editLibre: false, + editConditions: false, + actor: this + } + + rollData.carac = {}; + rollData.carac[tache.data.carac] = duplicate(this.data.data.carac[tache.data.carac]); // Single carac + console.log("rollTache !!!", duplicate(rollData)); + + const dialog = await RdDRoll.create(this, rollData, {html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html'}, { + name: 'jet-competence', + label: 'Jet de Tâche ' + tache.name, + callbacks: [ + this.createCallbackExperience(), + { action: this._tacheResult } + ] + } ); + dialog.render(true); + + } + + /* -------------------------------------------- */ + _tacheResult(rollData) { + ChatUtility.chatWithRollMode({ + content: "Test de Tache : " + rollData.tache.name + " - " + rollData.selectedCarac.label + " / " + rollData.competence.name + "" + + "
Difficultés libre : " + rollData.diffLibre + " / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat + + RdDResolutionTable.explain(rollData.rolled) + + "
Points de taches : " + rollData.rolled.ptTache + ", ajustement qualité: " + rollData.rolled.ptQualite + }, this.name); + + rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache; + rollData.actor.updateEmbeddedEntity( "OwnedItem", rollData.tache); + } + /* -------------------------------------------- */ _competenceResult(rollData) { ChatUtility.chatWithRollMode({ @@ -1510,7 +1564,7 @@ export class RdDActor extends Actor { + "
Difficultés libre : " + rollData.diffLibre + " / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat + RdDResolutionTable.explain(rollData.rolled) + "
Points de taches : " + rollData.rolled.ptTache + ", ajustement qualité: " + rollData.rolled.ptQualite - }, this.name) + }, this.name); } /* -------------------------------------------- */ @@ -1587,6 +1641,8 @@ export class RdDActor extends Actor { let competence = duplicate( RdDUtility.findCompetence( this.data.items, competenceName ) ); competence.data.xp += xpComp; await this.updateEmbeddedEntity( "OwnedItem", competence); + } else { + xpCarac = 1; // Si pas de competence, le max d'XP en carac est de 1 (cf p. 144) } if ( !carac[caracName].isderivee) { carac[caracName].xp += xpCarac; diff --git a/module/item-sheet.js b/module/item-sheet.js index 7e260cba..9893f88d 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -32,6 +32,11 @@ export class RdDItemSheet extends ItemSheet { getData() { let data = super.getData(); + if ( data.item.type == 'tache') { + //console.log("****", data, this); + data.caracList = duplicate(this.actor.data.data.carac), + data.competenceList = this.actor.getCompetenceList() + } data.bonusCaseList = RdDItemSort.getBonusCaseList(data, true); data.isGM = game.user.isGM; // Pour vérouiller certaines éditions @@ -63,7 +68,6 @@ export class RdDItemSheet extends ItemSheet { } /* -------------------------------------------- */ - get template() { let type = this.item.type; diff --git a/module/item-tache.js b/module/item-tache.js new file mode 100644 index 00000000..43b441d5 --- /dev/null +++ b/module/item-tache.js @@ -0,0 +1,4 @@ +export class RdDItemTache extends Item { + + +} \ No newline at end of file diff --git a/module/rdd-roll.js b/module/rdd-roll.js index f4d0a520..54f280bf 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -28,26 +28,27 @@ export class RdDRoll extends Dialog { /* -------------------------------------------- */ static _setDefaultOptions(actor, rollData) { - mergeObject(rollData, - { - ajustementsConditions: CONFIG.RDD.ajustementsConditions, - difficultesLibres: CONFIG.RDD.difficultesLibres, - etat: actor.data.data.compteurs.etat.value, - carac: actor.data.data.carac, - finalLevel: 0, - diffConditions: 0, - diffLibre: 0, - forceValue : actor.getForceValue(), - malusArmureValue: (actor.type == 'personnage ' && actor.data.data.attributs && actor.data.data.attributs.malusarmure) ? actor.data.data.attributs.malusarmure.value : 0, - surencMalusFlag: actor.type == 'personnage ' ? (actor.data.data.compteurs.surenc.value < 0) : false, - surencMalusValue: actor.type == 'personnage ' ? actor.data.data.compteurs.surenc.value : 0, - surencMalusApply: false, - isNatation: rollData.competence ? rollData.competence.name.toLowerCase().includes("natation") : false, - useEncForNatation: false, - encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0, - ajustementAstrologique: actor.ajustementAstrologique() - }, - { overwrite: false }); + let defaultRollData = { + ajustementsConditions: CONFIG.RDD.ajustementsConditions, + difficultesLibres: CONFIG.RDD.difficultesLibres, + etat: actor.data.data.compteurs.etat.value, + carac: actor.data.data.carac, + finalLevel: 0, + diffConditions: 0, + diffLibre: 0, + editLibre: true, + editConditions: true, + forceValue : actor.getForceValue(), + malusArmureValue: (actor.type == 'personnage ' && actor.data.data.attributs && actor.data.data.attributs.malusarmure) ? actor.data.data.attributs.malusarmure.value : 0, + surencMalusFlag: actor.type == 'personnage ' ? (actor.data.data.compteurs.surenc.value < 0) : false, + surencMalusValue: actor.type == 'personnage ' ? actor.data.data.compteurs.surenc.value : 0, + surencMalusApply: false, + isNatation: rollData.competence ? rollData.competence.name.toLowerCase().includes("natation") : false, + useEncForNatation: false, + encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0, + ajustementAstrologique: actor.ajustementAstrologique() + } + mergeObject(rollData, defaultRollData, { overwrite: false, insertValues:false } ); } /* -------------------------------------------- */ diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 4ec8e0fb..b69cdfde 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -236,6 +236,7 @@ export class RdDUtility { data.data.souffles = this.checkNull(data.itemsByType['souffle']); data.data.ombres = this.checkNull(data.itemsByType['ombre']); data.data.tetes = this.checkNull(data.itemsByType['tete']); + data.data.taches = this.checkNull(data.itemsByType['tache']); data.data.objets = data.data.conteneurs.concat(data.data.materiel).concat(data.data.armes).concat(data.data.armures).concat(data.data.munitions).concat(data.data.livres).concat(data.data.potions).concat(data.data.herbes).concat(data.data.ingredients); } diff --git a/styles/simple.css b/styles/simple.css index d8a58b7e..40a0efbd 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -572,6 +572,7 @@ ul, li { .generic-label, .competence-label, .astrologie-label, +.tache-label, .description-label { flex-grow: 2; } diff --git a/system.json b/system.json index 4ca9b6fd..a6c5f87b 100644 --- a/system.json +++ b/system.json @@ -2,10 +2,10 @@ "name": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", "description": "Rêve de Dragon RPG for FoundryVTT", - "version": "1.1.7", + "version": "1.1.9", "minimumCoreVersion": "0.7.5", "compatibleCoreVersion": "0.7.8", - "templateVersion": 66, + "templateVersion": 68, "author": "LeRatierBretonnien", "esmodules": [ "module/rdd-main.js", "module/hook-renderChatLog.js" ], "styles": ["styles/simple.css"], diff --git a/template.json b/template.json index 10bbbddb..521e4329 100644 --- a/template.json +++ b/template.json @@ -531,7 +531,7 @@ } }, "Item": { - "types": ["objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle", "tete", "competencecreature", "tarot", "monnaie", "nombreastral"], + "types": ["objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle", "tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache"], "objet": { "description": "", "quantite": 1, @@ -641,7 +641,10 @@ "cout": 0 }, "tache": { + "carac": "", "competence": "", + "periodicite": "", + "fatigue": 0, "difficulte": 0, "points_de_tache": 0, "points_de_tache_courant": 0, diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 1125bf73..29b45dd3 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -662,6 +662,21 @@ + +
+

Tâches

Créer une nouvelle Tâche + +
+

Biographie :

diff --git a/templates/dialog-competence.html b/templates/dialog-competence.html index 316ef4cb..d42ba2c7 100644 --- a/templates/dialog-competence.html +++ b/templates/dialog-competence.html @@ -12,7 +12,7 @@
- {{#select diffLibre}} {{#each difficultesLibres as |key|}} @@ -20,7 +20,7 @@ {{/select}} - {{#select diffConditions}} {{#each ajustementsConditions as |key|}} diff --git a/templates/item-tache-sheet.html b/templates/item-tache-sheet.html index 2231c8c5..20c06b01 100644 --- a/templates/item-tache-sheet.html +++ b/templates/item-tache-sheet.html @@ -9,19 +9,43 @@ {{!-- Sheet Body --}}
- - + +
+
+ + +
+
+ + +
+
+ + +
- +