From 0e3d721fc7787d3aad520c53a26ea73eadf25d9a Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 23:20:44 +0200 Subject: [PATCH] =?UTF-8?q?Nouvelle=20incarnation=20de=20l'arch=C3=A9type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 7 ++++--- module/actor-sheet.js | 3 +++ module/actor.js | 38 +++++++++++++++++++++++++++++++++-- module/time/rdd-timestamp.js | 4 +++- templates/actor-sheet.html | 4 ++-- templates/actor/archetype.hbs | 6 ++++++ 6 files changed, 54 insertions(+), 8 deletions(-) diff --git a/changelog.md b/changelog.md index 42c58cd1..46249370 100644 --- a/changelog.md +++ b/changelog.md @@ -1,8 +1,9 @@ # v11.0 -## v11.0.9 - Les premiers pieds de Werther de Zloth -- réorganisation des règles optionelles -- bouton pour accéder au mode de saisie de l'archétype en vue détaillée +## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux +- mode de saisie de l'archétype en vue détaillée +- création une nouvelle incarnation depuis l'archétype +- réorganisation de la fenêtre de sélection des règles optionelles - correction de l'affichage du types dans les fenêtres d'objets ## v11.0.8 - la poigne de Sémolosse diff --git a/module/actor-sheet.js b/module/actor-sheet.js index ef235610..0765ede4 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -364,6 +364,9 @@ export class RdDActorSheet extends RdDBaseActorSheet { this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); }); } + this.html.find('.nouvelle-incarnation').click(async event => { + this.actor.nouvelleIncarnation(); + }); this.html.find('.show-hide-competences').click(async event => { this.options.showCompNiveauBase = !this.options.showCompNiveauBase; diff --git a/module/actor.js b/module/actor.js index 8c0f2581..5c83bd9e 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1395,9 +1395,9 @@ export class RdDActor extends RdDBaseActor { await this.deleteEmbeddedDocuments('Item', obsoletes); } - async $finDeRoundEmpoignade(){ + async $finDeRoundEmpoignade() { const immobilisations = this.itemTypes[TYPES.empoignade].filter(it => it.system.pointsemp >= 2 && it.system.empoigneurid == this.id); - immobilisations.forEach(emp => RdDEmpoignade.onImmobilisation(this, + immobilisations.forEach(emp => RdDEmpoignade.onImmobilisation(this, game.actors.get(emp.system.empoigneid), emp )) @@ -3830,5 +3830,39 @@ export class RdDActor extends RdDBaseActor { content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}` }); } + + async nouvelleIncarnation() { + let incarnation = this.toObject(); + + incarnation.items = Array.from(this.items.filter(it => it.type == TYPES.competence), + it => { + it = it.toObject(); + it.id = undefined; + it.system.niveau = it.system.base; + it.system.niveau_archetype = Math.max(it.system.niveau + (it.system.xp > 0 ? 1 : 0), it.system.niveau_archetype); + it.system.xp = 0; + it.system.xp_sort = 0; + it.system.default_diffLibre = 0; + return it; + }); + + incarnation.name = 'Réincarnation de ' + incarnation.name + incarnation.system = { + carac: duplicate(this.system.carac), + heure: RdDTimestamp.defHeure(await RdDDice.rollTotal("1dh", { rollMode: "selfroll", showDice: SHOW_DICE })).key, + age: 18, + biographie: '', + notes: '', + experiencelog: [], + 'compteurs.experience.value': 3000, + 'reve.seuil.value': this.system.carac.reve.value, + 'reve.reve.value': this.system.carac.reve.value, + subacteurs: { suivants: [], montures: [], vehicules: [] }, + } + incarnation = await RdDBaseActor.create(incarnation); + await incarnation.deleteEmbeddedDocuments('ActiveEffect', incarnation.getEmbeddedCollection("ActiveEffect").map(it => it.id)); + await incarnation.remiseANeuf(); + incarnation.sheet.render(true); + } } diff --git a/module/time/rdd-timestamp.js b/module/time/rdd-timestamp.js index 948dd97b..9da28801 100644 --- a/module/time/rdd-timestamp.js +++ b/module/time/rdd-timestamp.js @@ -156,7 +156,9 @@ export class RdDTimestamp { fields.minute.change(async (event) => await onChangeTimestamp(fields, path)); } - + static defHeure(heure) { + return DEFINITION_HEURES.find(it => (it.heure) == heure % RDD_HEURES_PAR_JOUR); + } static findHeure(heure) { heure = Grammar.toLowerCaseNoAccentNoSpace(heure); let parHeureOuLabel = DEFINITION_HEURES.filter(it => (it.heure) == parseInt(heure) % RDD_HEURES_PAR_JOUR || Grammar.toLowerCaseNoAccentNoSpace(it.label) == heure); diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index bac05512..265aa607 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -70,9 +70,9 @@ {{#if options.vueDetaillee}}    {{#if @root.options.vueArchetype}} - Sortie archétype + Incarnation {{else}} - Edit. archétype + Archétype {{/if}} {{/if}} diff --git a/templates/actor/archetype.hbs b/templates/actor/archetype.hbs index 5be754ad..20b8200b 100644 --- a/templates/actor/archetype.hbs +++ b/templates/actor/archetype.hbs @@ -1,5 +1,11 @@