From 615a3f13154a95712c1ecbb8eac71cbf8d2f3494 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 03:00:00 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Organisation=20des=20r=C3=A8gles=20optionel?= =?UTF-8?q?les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 3 +++ module/settings/regles-optionelles.js | 33 +++++++++++++++------------ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/changelog.md b/changelog.md index 9e326136..4079e3fe 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # v11.0 +## v11.0.9 - Les premiers pieds de Werther de Zloth +- réorganisation des règles optionelles + ## v11.0.8 - la poigne de Sémolosse - lien vers le changelog - organisation des compendiums du système diff --git a/module/settings/regles-optionelles.js b/module/settings/regles-optionelles.js index 04157cb5..d6f7ad48 100644 --- a/module/settings/regles-optionelles.js +++ b/module/settings/regles-optionelles.js @@ -2,23 +2,22 @@ import { SYSTEM_RDD } from "../constants.js"; import { Misc } from "../misc.js"; const listeReglesOptionelles = [ - { group: 'Règles de combat', name: 'recul', descr: "Appliquer le recul en cas de particulière en force ou de charge" }, - { group: 'Règles de combat', name: 'resistanceArmeParade', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" }, - { group: 'Règles de combat', name: 'deteriorationArmure', descr: "Tenir compte de la détérioration des armures" }, - { group: 'Règles de combat', name: 'defenseurDesarme', descr: "Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier" }, - { group: 'Règles de combat', name: 'categorieParade', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" }, - { group: 'Règles de combat', name: 'tripleSignificative', descr: "En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès" }, - { group: 'Règles de combat', name: 'degat-minimum-malus-libre-simple', descr: "Le malus libre d'attaque remplace une des valeurs de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, si le plus petit dé est inférieur à 4, alors il devient 4.", default: false }, - { group: 'Règles de combat', name: 'degat-minimum-malus-libre', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false }, - { group: 'Règles de combat', name: 'degat-ajout-malus-libre', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false }, - { group: 'Règles de combat', name: 'validation-encaissement-gr', descr: "Le Gardien des Rêves doit valider les jets d'encaissement et peut les changer.", default: false }, + { group: 'Règles générales', name: 'appliquer-fatigue', descr: "Appliquer les règles de fatigue"}, + { group: 'Règles générales', name: 'astrologie', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels"}, - { group: 'Règles générales', name: 'astrologie', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels"}, - { group: 'Règles générales', name: 'afficher-prix-joueurs', descr: "Afficher le prix de l'équipement des joueurs", uniquementJoueur: true}, - { group: 'Règles générales', name: 'appliquer-fatigue', descr: "Appliquer les règles de fatigue"}, - { group: 'Règles générales', name: 'afficher-colonnes-reussite', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false }, - { group: 'Règles générales', name: 'chateau-dormant-gardien', descr: "Saisie des heures de sommeil/jets de moral par le gardien des rêves", default: true }, + { group: 'Règles de combat', name: 'recul', descr: "Appliquer le recul en cas de particulière en force ou de charge" }, + { group: 'Règles de combat', name: 'resistanceArmeParade', descr: "Faire le jet de résistance des armes lors de parades pouvant les endommager" }, + { group: 'Règles de combat', name: 'deteriorationArmure', descr: "Tenir compte de la détérioration des armures" }, + { group: 'Règles de combat', name: 'defenseurDesarme', descr: "Le défenseur peut être désarmé en parant une particulière en force ou une charge avec une arme autre qu'un bouclier" }, + { group: 'Règles de combat', name: 'categorieParade', descr: "Le défenseur doit obtenir une significative en cas de parade avec des armes de catégories différentes" }, + { group: 'Règles de combat', name: 'tripleSignificative', descr: "En cas de demi-surprise, d'attaque particulière en finesse, et de catégories d'armes différentes, le défenseur doit obtenir 1/8 des chances de succès" }, + { group: 'Règles de combat', name: 'validation-encaissement-gr', descr: "Le Gardien des Rêves doit valider les jets d'encaissement et peut les changer.", default: false }, + + { group: 'Automatisation', name: 'chateau-dormant-gardien', descr: "Saisie des heures de sommeil/jets de moral par le gardien des rêves", default: true }, + { group: 'Affichage', name: 'afficher-colonnes-reussite', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false }, + { group: 'Affichage', name: 'afficher-prix-joueurs', descr: "Afficher le prix de l'équipement des joueurs", uniquementJoueur: true}, + { group: 'Confirmations', name: 'confirmer-combat-sans-cible', descr: "Confirmer avant une attaque sans cible", scope: "client"}, { group: 'Confirmations', name: 'confirmation-tmr', descr: "Confirmer pour monter dans les TMR", scope: "client"}, { group: 'Confirmations', name: 'confirmation-refouler', descr: "Confirmer avant de refouler", scope: "client"}, @@ -31,6 +30,10 @@ const listeReglesOptionelles = [ { group: 'Confirmations', name: 'confirmation-supprimer-effet', descr: "Confirmer la suppression des effets", scope: "client"}, { group: 'Confirmations', name: 'confirmation-supprimer-competence', descr: "Confirmer la suppression des compétences", scope: "client"}, { group: 'Confirmations', name: 'confirmation-supprimer-autres', descr: "Confirmer la suppression des autres types d'Objets", scope: "client"}, + + { group: 'Options alternatives', name: 'degat-minimum-malus-libre-simple', descr: "Le malus libre d'attaque remplace une des valeurs de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, si le plus petit dé est inférieur à 4, alors il devient 4.", default: false }, + { group: 'Options alternatives', name: 'degat-minimum-malus-libre', descr: "Le malus libre d'attaque remplace une valeur de dés d'encaissement si elle est plus petite. Exemple : la difficulté libre de l'attaquant est de -4. Sur le jet d'encaissement, tout résultat inférieur à 4 devient 4.", default: false }, + { group: 'Options alternatives', name: 'degat-ajout-malus-libre', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false }, ]; const uniquementJoueur = listeReglesOptionelles.filter(it => it.uniquementJoueur).map(it=>it.name); -- 2.35.3 From 3b14e54829b072ebdfb60bf02209ea6bf4bf121e Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 02:58:51 +0200 Subject: [PATCH 2/6] =?UTF-8?q?Mode=20de=20saisie=20d'arch=C3=A9type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 1 + module/actor-sheet.js | 7 +++- module/item-competence.js | 34 ++++++++++--------- module/rdd-utility.js | 1 + styles/simple.css | 51 ++++++++++++++++++++++------- templates/actor-sheet.html | 19 +++++++++-- templates/actor/archetype.hbs | 15 +++++++++ templates/actor/competence.html | 10 +++--- templates/actor/xp-competences.html | 13 +------- 9 files changed, 105 insertions(+), 46 deletions(-) create mode 100644 templates/actor/archetype.hbs diff --git a/changelog.md b/changelog.md index 4079e3fe..e4bc761e 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## 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.8 - la poigne de Sémolosse - lien vers le changelog diff --git a/module/actor-sheet.js b/module/actor-sheet.js index ef9ad208..ef235610 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -33,7 +33,8 @@ export class RdDActorSheet extends RdDBaseActorSheet { tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }], showCompNiveauBase: false, - vueDetaillee: false + vueDetaillee: false, + vueArchetype: false, }); } @@ -353,6 +354,10 @@ export class RdDActorSheet extends RdDBaseActorSheet { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); }); + this.html.find('.toggle-archetype').click(async event => { + this.options.vueArchetype = !this.options.vueArchetype; + this.render(true); + }); // On competence archetype change this.html.find('.competence-archetype').change(async event => { let compName = event.currentTarget.attributes.compname.value; diff --git a/module/item-competence.js b/module/item-competence.js index 98a2e8eb..665e7d0f 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -8,18 +8,18 @@ const xp_par_niveau = [5, 5, 5, 10, 10, 10, 10, 15, 15, 15, 15, 20, 20, 20, 20, const niveau_max = xp_par_niveau.length - 10; /* -------------------------------------------- */ const limitesArchetypes = [ - { "niveau": 0, "nombreMax": 100, "reste": 100 }, - { "niveau": 1, "nombreMax": 10, "reste": 10 }, - { "niveau": 2, "nombreMax": 9, "reste": 9 }, - { "niveau": 3, "nombreMax": 8, "reste": 8 }, - { "niveau": 4, "nombreMax": 7, "reste": 7 }, - { "niveau": 5, "nombreMax": 6, "reste": 6 }, - { "niveau": 6, "nombreMax": 5, "reste": 5 }, - { "niveau": 7, "nombreMax": 4, "reste": 4 }, - { "niveau": 8, "nombreMax": 3, "reste": 3 }, - { "niveau": 9, "nombreMax": 2, "reste": 2 }, - { "niveau": 10, "nombreMax": 1, "reste": 1 }, - { "niveau": 11, "nombreMax": 1, "reste": 1 } + { niveau: 0, nombreMax: 100 }, + { niveau: 1, nombreMax: 10 }, + { niveau: 2, nombreMax: 9 }, + { niveau: 3, nombreMax: 8 }, + { niveau: 4, nombreMax: 7 }, + { niveau: 5, nombreMax: 6 }, + { niveau: 6, nombreMax: 5 }, + { niveau: 7, nombreMax: 4 }, + { niveau: 8, nombreMax: 3 }, + { niveau: 9, nombreMax: 2 }, + { niveau: 10, nombreMax: 1 }, + { niveau: 11, nombreMax: 1 }, ]; /* -------------------------------------------- */ @@ -259,13 +259,17 @@ export class RdDItemCompetence extends Item { /* -------------------------------------------- */ static computeResumeArchetype(competences) { const computed = duplicate(limitesArchetypes); + computed.forEach(it => { it.nombre = 0; it.reste = it.nombreMax; }); + competences.map(it => Math.max(0, it.system.niveau_archetype)) .filter(n => n > 0) .forEach(n => { - computed[n] = computed[n] ?? { niveau: n, nombreMax: 0, reste: 0 }; - computed[n].reste = computed[n].reste - 1; + computed[n] = computed[n] ?? { niveau: n, nombreMax: 0, reste: 0, nombre: 0 }; + computed[n].reste--; + computed[n].nombre++; + }); - return computed.filter(it => it.reste > 0 && it.niveau > 0); + return computed.filter(it => it.niveau > 0); } /* -------------------------------------------- */ diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 59a5f8be..df44ac7f 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -121,6 +121,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-entitee.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html', diff --git a/styles/simple.css b/styles/simple.css index 2dc2e31e..03760217 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -287,6 +287,16 @@ table {border: 1px solid #7a7971;} padding: 0; } + +.grid-competence-archetype { + display: grid; + grid-column: span 3 / span 3; + grid-template-columns: 2fr 2fr 1fr; + gap: 0.5rem; + margin: 0.5rem 0; + padding: 0; +} + .grid-3col { grid-column: span 3 / span 3; grid-template-columns: repeat(3, minmax(0, 1fr)); @@ -1898,34 +1908,51 @@ div.calendar-timestamp-edit select.calendar-signe-heure { opacity: 1; } -.chat-card-button { - box-shadow: inset 0px 1px 0px 0px #a6827e; - background: var(--background-custom-button); - background-color: #7d5d3b00; - border-radius: 3px; - border: 2px ridge #846109; - display: inline-block; +.chat-card-button, .chat-card-button-pushed { + border-radius: 0.2rem; cursor: pointer; - color: #ffffff; font-family: CaslonPro; font-size: 0.9rem; - padding: 4px 12px 0px 12px; + padding: 0.2rem 0.4rem 0rem 0.4rem; text-decoration: none; - text-shadow: 0px 1px 0px #4d3534; position: relative; - margin:5px; + margin: 0.3rem; + + border: 2px ridge #846109; + display: inline-block; } +.chat-card-button{ + text-shadow: 1px 1px #4d3534; + box-shadow: inset 1x 1px #a6827e; + color: var(--major-button-color); + background: var(--background-custom-button); + background-color: #7d5d3b00; +} + +.chat-card-button-pushed { + text-shadow: 1px 1px hsla(202, 30%, 70%, 0.5); + box-shadow: inset -1px -1px #a6827e; + color: hsla(202, 42%, 14%, 0.7); + background: var(--major-button-color); + background-color: #7d5d3b00; +} .chat-card-button:hover { background: var(--background-custom-button-hover); background-color: red; } -.chat-card-button:active { +.chat-card-button-pushed:hover { + background: var(--background-custom-button-hover); + background-color: red; +} + +.chat-card-button:active, .chat-card-button-pushed:active { position:relative; top:1px; } + /* Dropdown Content (Hidden by Default) */ .button-dropdown-content { display: none; diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index ad98f9f2..bac05512 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -53,7 +53,9 @@ {{#if options.isObserver}}{{!-- Compétences Tab --}}
- {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} + + {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} + {{#if options.showCompNiveauBase}} Montrer tout @@ -65,9 +67,17 @@ + {{#if options.vueDetaillee}} +    + {{#if @root.options.vueArchetype}} + Sortie archétype + {{else}} + Edit. archétype + {{/if}} + {{/if}}
-
+
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.generale) categorie="Compétences générales"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.particuliere) categorie="Compétences Particulières"}} @@ -83,6 +93,11 @@ {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.draconic) categorie="Draconic"}} {{/if}}
+ {{#if (and options.vueDetaillee options.vueArchetype)}} +
+ {{> "systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs"}} +
+ {{/if}}
{{/if}} diff --git a/templates/actor/archetype.hbs b/templates/actor/archetype.hbs new file mode 100644 index 00000000..5be754ad --- /dev/null +++ b/templates/actor/archetype.hbs @@ -0,0 +1,15 @@ +
+
    +
  • Niveaux d'archétype
  • + {{#if calc.comptageArchetype}} + {{#each calc.comptageArchetype as |archetype|}} + +
  • + +
  • + {{/each}} + {{/if}} +
+
diff --git a/templates/actor/competence.html b/templates/actor/competence.html index d954ea9c..38996591 100644 --- a/templates/actor/competence.html +++ b/templates/actor/competence.html @@ -14,12 +14,13 @@ + {{#if (or (not @root.options.vueDetaillee) @root.options.vueArchetype)}}disabled{{/if}} /> {{#if @root.options.vueDetaillee}} + value="{{numberFormat system.xp decimals=0 sign=false}}" data-dtype="number" + {{#if (or (not @root.options.vueDetaillee) @root.options.vueArchetype)}}disabled{{/if}} /> {{#unless system.isLevelUp}} Vous devez acquérir {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}} {{/unless}} @@ -28,7 +29,7 @@ {{#if (eq system.categorie 'draconic')}} + {{#if (or (not @root.options.vueDetaillee) @root.options.vueArchetype)}}disabled{{/if}} /> {{/if}} {{#if @root.options.vueDetaillee}}
@@ -41,7 +42,8 @@ {{/if}} + value="{{numberFormat system.niveau_archetype decimals=0 sign=true}}" data-dtype="number" + {{#if (not @root.options.vueArchetype)}}disabled{{/if}} /> {{#if @root.options.isGM}} diff --git a/templates/actor/xp-competences.html b/templates/actor/xp-competences.html index c70d6b62..13d924ff 100644 --- a/templates/actor/xp-competences.html +++ b/templates/actor/xp-competences.html @@ -13,18 +13,7 @@ Total XP compétences {{calc.competenceXPTotal}} - {{#if calc.comptageArchetype}} -

  • -
  • Niveaux d'archétype à répartir
  • - {{#each calc.comptageArchetype as |archetype key|}} - {{#if (gt archetype.reste 0)}} -
  • - -
  • - {{/if}} - {{/each}} - {{/if}} - {{/if}} + {{/if}}
  •  
  • -- 2.35.3 From e1e45a83bef65cb5b15f7e43ce1e9798558963b3 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 02:59:26 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Correction=20titre=20des=20fen=C3=AAtres=20?= =?UTF-8?q?Item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 1 + module/misc.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index e4bc761e..42c58cd1 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,7 @@ ## 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 +- correction de l'affichage du types dans les fenêtres d'objets ## v11.0.8 - la poigne de Sémolosse - lien vers le changelog diff --git a/module/misc.js b/module/misc.js index ac04d1e6..f055f4a0 100644 --- a/module/misc.js +++ b/module/misc.js @@ -42,7 +42,7 @@ export class Misc { } static typeName(type, subType) { - return subType ? game.i18n.localize(`${type.toUpperCase()}.Type${Misc.upperFirst(subType)}`) + return subType ? game.i18n.localize(`TYPES.${type}.${Misc.upperFirst(subType)}`) : ''; } -- 2.35.3 From 0e3d721fc7787d3aad520c53a26ea73eadf25d9a Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 23:20:44 +0200 Subject: [PATCH 4/6] =?UTF-8?q?Nouvelle=20incarnation=20de=20l'arch=C3=A9t?= =?UTF-8?q?ype?= 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 @@
      + {{#if @root.options.isGM}} +
    • + Nouvelle incarnation +
    • + {{/if}} +

    • Niveaux d'archétype
    • {{#if calc.comptageArchetype}} {{#each calc.comptageArchetype as |archetype|}} -- 2.35.3 From b101d58bee6a55f14f818f91ec4fcb83fc31fe60 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 23:43:24 +0200 Subject: [PATCH 5/6] Correction typo "optionnelle" --- module/actor-sheet.js | 4 +-- module/actor.js | 20 +++++------ module/item-sheet.js | 4 +-- module/item/armure.js | 4 +-- module/rdd-combat.js | 10 +++--- module/rdd-confirm.js | 6 ++-- module/rdd-empoignade.js | 2 +- module/rdd-main.js | 4 +-- module/rdd-resolution-table.js | 4 +-- module/rdd-roll.js | 4 +-- module/rdd-tmr-dialog.js | 16 ++++----- module/rdd-utility.js | 14 ++++---- module/rolldata-ajustements.js | 4 +-- ...-optionelles.js => regles-optionnelles.js} | 34 +++++++++---------- module/sommeil/dialog-repos.js | 4 +-- module/time/rdd-calendrier.js | 4 +-- ...ionelles.html => regles-optionnelles.html} | 0 17 files changed, 69 insertions(+), 69 deletions(-) rename module/settings/{regles-optionelles.js => regles-optionnelles.js} (86%) rename templates/settings/{regles-optionelles.html => regles-optionnelles.html} (100%) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 0765ede4..8a43be12 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -7,7 +7,7 @@ import { Misc } from "./misc.js"; import { RdDCombatManager } from "./rdd-combat.js"; import { RdDCarac } from "./rdd-carac.js"; import { DialogSplitItem } from "./dialog-split-item.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { RdDSheetUtility } from "./rdd-sheet-utility.js"; import { STATUSES } from "./settings/status-effects.js"; import { MAINS_DIRECTRICES } from "./actor.js"; @@ -115,7 +115,7 @@ export class RdDActorSheet extends RdDBaseActorSheet { activateListeners(html) { super.activateListeners(html); - HtmlUtility.showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); + HtmlUtility.showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionnelles.isUsing("appliquer-fatigue")); // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; diff --git a/module/actor.js b/module/actor.js index 5c83bd9e..c6848e1b 100644 --- a/module/actor.js +++ b/module/actor.js @@ -18,7 +18,7 @@ import { RdDAlchimie } from "./rdd-alchimie.js"; import { STATUSES, StatusEffects } from "./settings/status-effects.js"; import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; import { RdDItemSigneDraconique } from "./item/signedraconique.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { Draconique } from "./tmr/draconique.js"; import { RdDCarac } from "./rdd-carac.js"; @@ -134,7 +134,7 @@ export class RdDActor extends RdDBaseActor { } /* -------------------------------------------- */ getFatigueActuelle() { - if (ReglesOptionelles.isUsing("appliquer-fatigue") && this.isPersonnage()) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue") && this.isPersonnage()) { return this.system.sante.fatigue?.value; } return 0; @@ -457,7 +457,7 @@ export class RdDActor extends RdDBaseActor { /* -------------------------------------------- */ async dormirChateauDormant() { - if (!ReglesOptionelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) { + if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) { const message = { whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name), content: "" @@ -712,7 +712,7 @@ export class RdDActor extends RdDBaseActor { /* -------------------------------------------- */ async recupererFatigue(message) { - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { let fatigue = this.system.sante.fatigue.value; const fatigueMin = this._computeFatigueMin(); if (fatigue <= fatigueMin) { @@ -1178,7 +1178,7 @@ export class RdDActor extends RdDBaseActor { } // Pour les autres let state = Math.min(this.system.sante.vie.value - this.system.sante.vie.max, 0); - if (ReglesOptionelles.isUsing("appliquer-fatigue") && this.system.sante.fatigue) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue") && this.system.sante.fatigue) { state += RdDUtility.currentFatigueMalus(this.system.sante.fatigue.value, this.system.sante.endurance.max); } // Ajout de l'éthylisme @@ -1505,7 +1505,7 @@ export class RdDActor extends RdDBaseActor { /* -------------------------------------------- */ async santeIncDec(name, inc, isCritique = false) { - if (name == 'fatigue' && !ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (name == 'fatigue' && !ReglesOptionnelles.isUsing("appliquer-fatigue")) { return; } const sante = duplicate(this.system.sante) @@ -1547,7 +1547,7 @@ export class RdDActor extends RdDBaseActor { } compteur.value = result.newValue; // If endurance lost, then the same amount of fatigue cannot be recovered - if (ReglesOptionelles.isUsing("appliquer-fatigue") && sante.fatigue && fatigue > 0) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue") && sante.fatigue && fatigue > 0) { sante.fatigue.value = Math.max(sante.fatigue.value + fatigue, this._computeFatigueMin()); } await this.update({ "system.sante": sante }) @@ -2449,7 +2449,7 @@ export class RdDActor extends RdDBaseActor { /* -------------------------------------------- */ async _tacheResult(rollData, options) { // Mise à jour de la tache - rollData.appliquerFatigue = ReglesOptionelles.isUsing("appliquer-fatigue"); + rollData.appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue"); rollData.tache = duplicate(rollData.tache); rollData.tache.system.points_de_tache_courant += rollData.rolled.ptTache; if (rollData.rolled.isETotal) { @@ -3230,7 +3230,7 @@ export class RdDActor extends RdDBaseActor { return; } const attackerId = attacker?.id; - if (ReglesOptionelles.isUsing('validation-encaissement-gr') && !game.user.isGM) { + if (ReglesOptionnelles.isUsing('validation-encaissement-gr') && !game.user.isGM) { RdDBaseActor.remoteActorCall({ actorId: this.id, method: 'appliquerEncaissement', @@ -3243,7 +3243,7 @@ export class RdDActor extends RdDBaseActor { async appliquerEncaissement(rollData, show, attackerId) { const armure = await this.computeArmure(rollData); - if (ReglesOptionelles.isUsing('validation-encaissement-gr')) { + if (ReglesOptionnelles.isUsing('validation-encaissement-gr')) { DialogValidationEncaissement.validerEncaissement(this, rollData, armure, show, attackerId, (encaissement, show, attackerId) => this._appliquerEncaissement(encaissement, show, attackerId)); } else { diff --git a/module/item-sheet.js b/module/item-sheet.js index 3a190dd2..e2f5bd7c 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -5,7 +5,7 @@ import { RdDItemCompetence } from "./item-competence.js"; import { RdDHerbes } from "./rdd-herbes.js"; import { RdDGemme } from "./rdd-gemme.js"; import { HtmlUtility } from "./html-utility.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { SYSTEM_RDD } from "./constants.js"; import { RdDSheetUtility } from "./rdd-sheet-utility.js"; import { SystemCompendiums } from "./settings/system-compendiums.js"; @@ -157,7 +157,7 @@ export class RdDItemSheet extends ItemSheet { super.activateListeners(html); this.html = html; - HtmlUtility.showControlWhen(this.html.find(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') + HtmlUtility.showControlWhen(this.html.find(".item-cout"), ReglesOptionnelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.item.isOwned); HtmlUtility.showControlWhen(this.html.find(".item-magique"), this.item.isMagique()); diff --git a/module/item/armure.js b/module/item/armure.js index 101977a5..ffdcdd62 100644 --- a/module/item/armure.js +++ b/module/item/armure.js @@ -1,6 +1,6 @@ import { RdDItem } from "../item.js"; import { Misc } from "../misc.js"; -import { ReglesOptionelles } from "../settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; export class RdDItemArmure extends RdDItem { @@ -9,7 +9,7 @@ export class RdDItemArmure extends RdDItem { } deteriorerArmure(dmg) { - if (!ReglesOptionelles.isUsing('deteriorationArmure') || this.system.protection == '0') { + if (!ReglesOptionnelles.isUsing('deteriorationArmure') || this.system.protection == '0') { return; } let deterioration = (this.system.deterioration ?? 0) + dmg; diff --git a/module/rdd-combat.js b/module/rdd-combat.js index e6d4bfe7..8eec5bb5 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -9,7 +9,7 @@ import { RdDBonus } from "./rdd-bonus.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js"; import { RdDRoll } from "./rdd-roll.js"; import { RdDRollTables } from "./rdd-rolltables.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { STATUSES } from "./settings/status-effects.js"; import { Targets } from "./targets.js"; import { RdDEmpoignade } from "./rdd-empoignade.js"; @@ -1048,7 +1048,7 @@ export class RdDCombat { competence: this.defender.getCompetence(competenceParade).clone(), arme: armeParade, surprise: this.defender.getSurprise(true), - needParadeSignificative: ReglesOptionelles.isUsing('categorieParade') && RdDItemArme.needParadeSignificative(attackerRoll.arme, armeParade), + needParadeSignificative: ReglesOptionnelles.isUsing('categorieParade') && RdDItemArme.needParadeSignificative(attackerRoll.arme, armeParade), needResist: RdDItemArme.needArmeResist(attackerRoll.arme, armeParade), carac: this.defender.system.carac, show: {} @@ -1166,7 +1166,7 @@ export class RdDCombat { /* -------------------------------------------- */ async computeDeteriorationArme(defenderRoll) { - if (!ReglesOptionelles.isUsing('resistanceArmeParade')) { + if (!ReglesOptionnelles.isUsing('resistanceArmeParade')) { return; } const attackerRoll = defenderRoll.attackerRoll; @@ -1215,7 +1215,7 @@ export class RdDCombat { } } // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132) - if (ReglesOptionelles.isUsing('defenseurDesarme') && resistance > 0 && RdDItemArme.getCategorieParade(defenderRoll.arme) != 'boucliers') { + if (ReglesOptionnelles.isUsing('defenseurDesarme') && resistance > 0 && RdDItemArme.getCategorieParade(defenderRoll.arme) != 'boucliers') { let desarme = await RdDResolutionTable.rollData({ caracValue: this.defender.getForce(), finalLevel: Misc.toInt(defenderRoll.competence.system.niveau) - dmg, @@ -1230,7 +1230,7 @@ export class RdDCombat { /* -------------------------------------------- */ async computeRecul(defenderRoll) { // Calcul du recul (p. 132) const attackerRoll = defenderRoll.attackerRoll; - if (ReglesOptionelles.isUsing('recul') && this._isForceOuCharge(attackerRoll)) { + if (ReglesOptionnelles.isUsing('recul') && this._isForceOuCharge(attackerRoll)) { const impact = this._computeImpactRecul(attackerRoll); const rollRecul = await RdDResolutionTable.rollData({ caracValue: 10, finalLevel: impact }); if (rollRecul.rolled.isSuccess) { diff --git a/module/rdd-confirm.js b/module/rdd-confirm.js index c0a480b1..d9dbba5a 100644 --- a/module/rdd-confirm.js +++ b/module/rdd-confirm.js @@ -1,10 +1,10 @@ import { Grammar } from "./grammar.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; export class RdDConfirm { /* -------------------------------------------- */ static confirmer(options, autresActions) { - options.bypass = options.bypass || !(options.settingConfirmer == undefined || ReglesOptionelles.isUsing(options.settingConfirmer)); + options.bypass = options.bypass || !(options.settingConfirmer == undefined || ReglesOptionnelles.isUsing(options.settingConfirmer)); if (options.bypass) { options.onAction(); } @@ -47,7 +47,7 @@ export class RdDConfirm { icon: '', label: options.buttonLabel + "
      et ne plus demander", callback: () => { - ReglesOptionelles.set(options.settingConfirmer, false); + ReglesOptionnelles.set(options.settingConfirmer, false); options.onAction(); } } diff --git a/module/rdd-empoignade.js b/module/rdd-empoignade.js index 89f65256..2654b977 100644 --- a/module/rdd-empoignade.js +++ b/module/rdd-empoignade.js @@ -4,7 +4,7 @@ import { RdDRoll } from "./rdd-roll.js"; import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; import { ChatUtility } from "./chat-utility.js"; import { STATUSES } from "./settings/status-effects.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { TYPES } from "./item.js"; /* -------------------------------------------- */ diff --git a/module/rdd-main.js b/module/rdd-main.js index 65d4b106..a1ba3236 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -15,7 +15,7 @@ import { RdDCombatManager, RdDCombat } from "./rdd-combat.js"; import { ChatUtility } from "./chat-utility.js"; import { StatusEffects } from "./settings/status-effects.js"; import { RdDCompendiumOrganiser } from "./rdd-compendium-organiser.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { RdDHotbar } from "./rdd-hotbar-drop.js" import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { RdDHerbes } from "./rdd-herbes.js"; @@ -186,7 +186,7 @@ export class SystemReveDeDragon { RdDCalendrier.init(); SystemCompendiums.init(); DialogChronologie.init(); - ReglesOptionelles.init(); + ReglesOptionnelles.init(); RdDUtility.init(); RdDDice.init(); RdDCommands.init(); diff --git a/module/rdd-resolution-table.js b/module/rdd-resolution-table.js index 02a99b07..60ba2114 100644 --- a/module/rdd-resolution-table.js +++ b/module/rdd-resolution-table.js @@ -1,7 +1,7 @@ import { ChatUtility } from "./chat-utility.js"; import { Misc } from "./misc.js"; import { RdDDice } from "./rdd-dice.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; /** * difficultés au delà de -10 @@ -126,7 +126,7 @@ export class RdDResolutionTable { rolled.bonus = rollData.bonus; rolled.factorHtml = Misc.getFractionHtml(rollData.diviseurSignificative); - if (ReglesOptionelles.isUsing("afficher-colonnes-reussite")) { + if (ReglesOptionnelles.isUsing("afficher-colonnes-reussite")) { rolled.niveauNecessaire = this.findNiveauNecessaire(caracValue, rolled.roll); rolled.ajustementNecessaire = rolled.niveauNecessaire - finalLevel; } diff --git a/module/rdd-roll.js b/module/rdd-roll.js index e558902c..225f03fc 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -6,7 +6,7 @@ import { Misc } from "./misc.js"; import { RdDBonus } from "./rdd-bonus.js"; import { RdDCarac } from "./rdd-carac.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; /** * Extend the base Dialog entity to select roll parameters @@ -85,7 +85,7 @@ export class RdDRoll extends Dialog { if (RdDBonus.isDefenseAttaqueFinesse(rollData)) { facteurSign *= 2; } - if (!ReglesOptionelles.isUsing('tripleSignificative')) { + if (!ReglesOptionnelles.isUsing('tripleSignificative')) { facteurSign = Math.min(facteurSign, 4); } return facteurSign; diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index f54e6412..6d43df08 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -12,7 +12,7 @@ import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; import { PixiTMR } from "./tmr/pixi-tmr.js"; import { Draconique } from "./tmr/draconique.js"; import { HtmlUtility } from "./html-utility.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { RdDDice } from "./rdd-dice.js"; import { STATUSES } from "./settings/status-effects.js"; import { RdDRencontre } from "./item/rencontre.js"; @@ -55,7 +55,7 @@ export class RdDTMRDialog extends Dialog { this.actor = actor; this.actor.tmrApp = this; // reference this app in the actor structure this.viewOnly = tmrData.mode == "visu" - this.fatigueParCase = this.viewOnly || !ReglesOptionelles.isUsing("appliquer-fatigue") ? 0 : this.actor.getTMRFatigue(); + this.fatigueParCase = this.viewOnly || !ReglesOptionnelles.isUsing("appliquer-fatigue") ? 0 : this.actor.getTMRFatigue(); this.cumulFatigue = 0; this.loadRencontres(); this.loadCasesSpeciales(); @@ -207,7 +207,7 @@ export class RdDTMRDialog extends Dialog { return; } - HtmlUtility.showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); + HtmlUtility.showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionnelles.isUsing("appliquer-fatigue")); HtmlUtility.showControlWhen(this.html.find(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(this._getActorCoord())); // Roll Sort @@ -227,7 +227,7 @@ export class RdDTMRDialog extends Dialog { // Gestion du cout de montée en points de rêve let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse(); - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { this.cumulFatigue += this.fatigueParCase; } await this.actor.reveActuelIncDec(reveCout); @@ -263,7 +263,7 @@ export class RdDTMRDialog extends Dialog { let refoulement = document.getElementById("tmr-refoulement-value"); refoulement.innerHTML = this.actor.system.reve.refoulement.value; - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { let fatigueItem = document.getElementById("tmr-fatigue-table"); fatigueItem.innerHTML = "" + RdDUtility.makeHTMLfatigueMatrix(this.actor.system.sante.fatigue.value, this.actor.system.sante.endurance.max).html() + "
      "; } @@ -367,7 +367,7 @@ export class RdDTMRDialog extends Dialog { return true; } const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.cumulFatigue; - if (ReglesOptionelles.isUsing("appliquer-fatigue") && resteAvantInconscience <= 0) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue") && resteAvantInconscience <= 0) { this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !"); this.quitterLesTMRInconscient(); return true; @@ -451,7 +451,7 @@ export class RdDTMRDialog extends Dialog { setTimeout(() => { // TODO: remplacer par une boucle while(this.currentRencontre) ? rencData.nbRounds++; - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { this.cumulFatigue += this.fatigueParCase; } this._tentativeMaitrise(rencData); @@ -1004,7 +1004,7 @@ export class RdDTMRDialog extends Dialog { await this.actor.updateCoordTMR(tmr.coord); this.forceDemiRevePositionView(); - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { this.cumulFatigue += this.fatigueParCase; } this.updateValuesDisplay(); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index df44ac7f..4bfa7e7b 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -5,7 +5,7 @@ import { Misc } from "./misc.js"; import { Grammar } from "./grammar.js"; import { TMRUtility } from "./tmr-utility.js"; import { DialogItemAchat } from "./dialog-item-achat.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; import { RdDDice } from "./rdd-dice.js"; import { RdDItem } from "./item.js"; import { RdDPossession } from "./rdd-possession.js"; @@ -279,7 +279,7 @@ export class RdDUtility { Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode()); Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1))); - Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option)); + Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option)); Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name))); Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences)); Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name)); @@ -479,7 +479,7 @@ export class RdDUtility { /* -------------------------------------------- */ static calculFatigueHtml(fatigue, endurance) { - return ReglesOptionelles.isUsing("appliquer-fatigue") ? { + return ReglesOptionnelles.isUsing("appliquer-fatigue") ? { malus: RdDUtility.calculMalusFatigue(fatigue, endurance), html: "" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "
      " } : { malus: 0, html: '' }; @@ -555,14 +555,14 @@ export class RdDUtility { let formula = "2d10"; // Chaque dé fait au minmum la difficulté libre - if (ReglesOptionelles.isUsing('degat-minimum-malus-libre')) { + if (ReglesOptionnelles.isUsing('degat-minimum-malus-libre')) { if (rollData.diffLibre < 0) { let valeurMin = Math.abs(rollData.diffLibre); formula += "min" + valeurMin; } } // Chaque dé fait au minmum la difficulté libre - if (ReglesOptionelles.isUsing('degat-ajout-malus-libre')) { + if (ReglesOptionnelles.isUsing('degat-ajout-malus-libre')) { if (rollData.diffLibre < 0) { let valeurMin = Math.abs(rollData.diffLibre); formula += "+" + valeurMin; @@ -572,7 +572,7 @@ export class RdDUtility { let roll = await RdDDice.roll(formula, options); // 1 dé fait au minmum la difficulté libre - if (ReglesOptionelles.isUsing('degat-minimum-malus-libre-simple')) { + if (ReglesOptionnelles.isUsing('degat-minimum-malus-libre-simple')) { if (rollData.diffLibre < 0) { let valeurMin = Math.abs(rollData.diffLibre); if (roll.terms[0].results[0].result < valeurMin) { @@ -625,7 +625,7 @@ export class RdDUtility { /* -------------------------------------------- */ static currentFatigueMalus(value, max) { - if (ReglesOptionelles.isUsing("appliquer-fatigue")) { + if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { max = Math.max(1, Math.min(max, 60)); value = Math.min(max * 2, Math.max(0, value)); diff --git a/module/rolldata-ajustements.js b/module/rolldata-ajustements.js index a141cae0..aa19a414 100644 --- a/module/rolldata-ajustements.js +++ b/module/rolldata-ajustements.js @@ -7,7 +7,7 @@ import { RdDBonus } from "./rdd-bonus.js"; import { RdDCarac } from "./rdd-carac.js"; import { RdDPossession } from "./rdd-possession.js"; import { RdDUtility } from "./rdd-utility.js"; -import { ReglesOptionelles } from "./settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; /** * tous les ajustements pouvant s'appliquer. @@ -86,7 +86,7 @@ export const referenceAjustements = { getValue: (rollData, actor) => actor.getMoralTotal() }, astrologique: { - isUsed: (rollData, actor) => ReglesOptionelles.isUsing("astrologie") && RdDBonus.isAjustementAstrologique(rollData), + isUsed: (rollData, actor) => ReglesOptionnelles.isUsing("astrologie") && RdDBonus.isAjustementAstrologique(rollData), getLabel: (rollData, actor) => 'Astrologique', getValue: (rollData, actor) => actor.ajustementAstrologique() }, diff --git a/module/settings/regles-optionelles.js b/module/settings/regles-optionnelles.js similarity index 86% rename from module/settings/regles-optionelles.js rename to module/settings/regles-optionnelles.js index d6f7ad48..8f3f3bf1 100644 --- a/module/settings/regles-optionelles.js +++ b/module/settings/regles-optionnelles.js @@ -1,7 +1,7 @@ import { SYSTEM_RDD } from "../constants.js"; import { Misc } from "../misc.js"; -const listeReglesOptionelles = [ +const listeReglesOptionnelles = [ { group: 'Règles générales', name: 'appliquer-fatigue', descr: "Appliquer les règles de fatigue"}, { group: 'Règles générales', name: 'astrologie', descr: "Appliquer les ajustements astrologiques aux jets de chance et aux rituels"}, @@ -36,22 +36,22 @@ const listeReglesOptionelles = [ { group: 'Options alternatives', name: 'degat-ajout-malus-libre', descr: "Le malus libre d'attaque s'ajoute au jet d'encaissement et aux autres bonus. Exemple : la difficulté libre de l'attaquant est de -4. Le jet d'encaissement est effectué à 2d10+4, plus les bonus de situation et d'armes.", default: false }, ]; -const uniquementJoueur = listeReglesOptionelles.filter(it => it.uniquementJoueur).map(it=>it.name); +const uniquementJoueur = listeReglesOptionnelles.filter(it => it.uniquementJoueur).map(it=>it.name); -export class ReglesOptionelles extends FormApplication { +export class ReglesOptionnelles extends FormApplication { static init() { - for (const regle of listeReglesOptionelles) { + for (const regle of listeReglesOptionnelles) { const name = regle.name; - const id = ReglesOptionelles._getIdRegle(name); + const id = ReglesOptionnelles._getIdRegle(name); game.settings.register(SYSTEM_RDD, id, { name: id, scope: regle.scope ?? "world", config: false, default: regle.default == undefined ? true : regle.default, type: Boolean }); } game.settings.registerMenu(SYSTEM_RDD, "rdd-options-regles", { - name: "Choisir les règles optionelles", - label: "Règles optionelles", - hint: "Ouvre la fenêtre de sélection des règles optionelles", + name: "Choisir les règles optionnelles", + label: "Règles optionnelles", + hint: "Ouvre la fenêtre de sélection des règles optionnelles", icon: "fas fa-bars", - type: ReglesOptionelles + type: ReglesOptionnelles }); } @@ -66,8 +66,8 @@ export class ReglesOptionelles extends FormApplication { static get defaultOptions() { const options = super.defaultOptions; mergeObject(options, { - id: "regles-optionelles", - template: "systems/foundryvtt-reve-de-dragon/templates/settings/regles-optionelles.html", + id: "regles-optionnelles", + template: "systems/foundryvtt-reve-de-dragon/templates/settings/regles-optionnelles.html", height: 600, width: 450, minimizable: false, @@ -79,10 +79,10 @@ export class ReglesOptionelles extends FormApplication { getData() { let formData = super.getData(); - const regles = listeReglesOptionelles.filter(it => game.user.isGM || it.scope == "client").map(it => { + const regles = listeReglesOptionnelles.filter(it => game.user.isGM || it.scope == "client").map(it => { it = duplicate(it); - it.id = ReglesOptionelles._getIdRegle(it.name); - it.active = ReglesOptionelles.isSet(it.name); + it.id = ReglesOptionnelles._getIdRegle(it.name); + it.active = ReglesOptionnelles.isSet(it.name); return it; }); formData.regles = regles; @@ -94,15 +94,15 @@ export class ReglesOptionelles extends FormApplication { if (game.user.isGM && uniquementJoueur.includes(name)) { return true; } - return ReglesOptionelles.isSet(name); + return ReglesOptionnelles.isSet(name); } static isSet(name) { - return game.settings.get(SYSTEM_RDD, ReglesOptionelles._getIdRegle(name)); + return game.settings.get(SYSTEM_RDD, ReglesOptionnelles._getIdRegle(name)); } static set(name, value) { - return game.settings.set(SYSTEM_RDD, ReglesOptionelles._getIdRegle(name), value ? true: false); + return game.settings.set(SYSTEM_RDD, ReglesOptionnelles._getIdRegle(name), value ? true: false); } activateListeners(html) { diff --git a/module/sommeil/dialog-repos.js b/module/sommeil/dialog-repos.js index 2c766c1a..d895c8ee 100644 --- a/module/sommeil/dialog-repos.js +++ b/module/sommeil/dialog-repos.js @@ -1,4 +1,4 @@ -import { ReglesOptionelles } from "../settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; import { EffetsDraconiques } from "../tmr/effets-draconiques.js"; export class DialogRepos extends Dialog { @@ -7,7 +7,7 @@ export class DialogRepos extends Dialog { if (!actor.isPersonnage()) { return } - if (!ReglesOptionelles.isUsing("chateau-dormant-gardien") || !actor.hasPlayerOwner) { + if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !actor.hasPlayerOwner) { actor.system.sommeil = { "nouveaujour": true, "insomnie": EffetsDraconiques.isSujetInsomnie(actor), diff --git a/module/time/rdd-calendrier.js b/module/time/rdd-calendrier.js index 4e45b7cc..f1c603f0 100644 --- a/module/time/rdd-calendrier.js +++ b/module/time/rdd-calendrier.js @@ -6,7 +6,7 @@ import { RdDDice } from "../rdd-dice.js"; import { Misc } from "../misc.js"; import { DialogChronologie } from "../dialog-chronologie.js"; import { HIDE_DICE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "../constants.js"; -import { ReglesOptionelles } from "../settings/regles-optionelles.js"; +import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; import { DialogChateauDormant } from "../sommeil/dialog-chateau-dormant.js"; import { APP_ASTROLOGIE_REFRESH, AppAstrologie } from "../sommeil/app-astrologie.js"; @@ -305,7 +305,7 @@ export class RdDCalendrier extends Application { const oldTimestamp = this.timestamp; await Promise.all(game.actors.map(async actor => await actor.onTimeChanging(oldTimestamp, newTimestamp))); RdDTimestamp.setWorldTime(newTimestamp); - if (oldTimestamp.indexDate + 1 == newTimestamp.indexDate && ReglesOptionelles.isUsing("chateau-dormant-gardien")) { + if (oldTimestamp.indexDate + 1 == newTimestamp.indexDate && ReglesOptionnelles.isUsing("chateau-dormant-gardien")) { await DialogChateauDormant.create(); } this.timestamp = newTimestamp; diff --git a/templates/settings/regles-optionelles.html b/templates/settings/regles-optionnelles.html similarity index 100% rename from templates/settings/regles-optionelles.html rename to templates/settings/regles-optionnelles.html -- 2.35.3 From 2739c650d9d3aa070a5e8817bcef779a28839f50 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Tue, 20 Jun 2023 23:37:12 +0200 Subject: [PATCH 6/6] Version 11.0.9 - Les Souvenirs de Khrachtchoum --- changelog.md | 4 ++-- system.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 46249370..41c544ea 100644 --- a/changelog.md +++ b/changelog.md @@ -3,8 +3,8 @@ ## 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 +- réorganisation de la fenêtre de sélection des règles optionnelles +- correction de l'affichage du type dans les fenêtres d'objets ## v11.0.8 - la poigne de Sémolosse - lien vers le changelog diff --git a/system.json b/system.json index ebe15644..439ad5bf 100644 --- a/system.json +++ b/system.json @@ -1,8 +1,8 @@ { "id": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", - "version": "11.0.8", - "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.0.8.zip", + "version": "11.0.9", + "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.0.9.zip", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json", "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", "compatibility": { -- 2.35.3