From 9b1a179a71d2b5370181f891be4660c7e9959c7a Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 29 Nov 2024 23:32:21 +0100 Subject: [PATCH] Corrections voies draconic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Utilisation du nom de voie (Oniros au lieu de Voie d'Oniros) - compatible anciens sorts - migration des objets existants - amélioration de l'affichage de la liste des sorts --- changelog.md | 3 ++ module/actor/export-scriptarium/mapping.js | 18 +++------- module/item-sheet.js | 2 +- module/item-sort.js | 38 +++++++++++++++------- module/migrations.js | 28 +++++++++++++++- module/rdd-main.js | 2 ++ templates/actor/hr-sorts.html | 15 +++++---- templates/enum-draconic.html | 2 +- 8 files changed, 74 insertions(+), 34 deletions(-) diff --git a/changelog.md b/changelog.md index 325878fc..250213e5 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # 12.0 ## 12.0.24 - Les ajustements d'Astrobazzarh +- amélioration + - meilleure gestion des noms des voies de draconic + - affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût - corrections - les tas dans les conteneurs peuvent être désempilés sans rendre le conteneur inutilisable - les conteneurs ne peuvent plus être empilés (pour éviter que le contenu de Schroedinger quand on les sépare) diff --git a/module/actor/export-scriptarium/mapping.js b/module/actor/export-scriptarium/mapping.js index e93b7b5c..e36db5ff 100644 --- a/module/actor/export-scriptarium/mapping.js +++ b/module/actor/export-scriptarium/mapping.js @@ -238,7 +238,7 @@ export class Mapping { static prepareSorts(actor) { const codeVoies = Mapping.getCompetencesCategorie(actor, CATEGORIES_DRACONIC) - .map(it => RdDItemSort.getVoieCode(it)) + .map(it => RdDItemSort.getCodeVoie(it.name)) return actor.itemTypes[ITEM_TYPES.sort].map(it => Mapping.prepareSort(it, codeVoies)) .sort(Misc.ascending(it => `${it.voie} : ${it.description}`)) @@ -246,7 +246,7 @@ export class Mapping { static prepareSort(sort, voies) { return { - voie: RdDItemSort.getCodeDraconic(sort, voies), + voie: RdDItemSort.getCode(sort, voies), description: Mapping.descriptionSort(sort), bonus: Mapping.bonusCase(sort) } @@ -255,17 +255,9 @@ export class Mapping { static descriptionSort(sort) { const ptSeuil = Array(sort.system.coutseuil).map(it => '*') const caseTMR = sort.system.caseTMRspeciale.length > 0 ? Mapping.toVar(sort.system.caseTMRspeciale) : Misc.upperFirst(TMRType[sort.system.caseTMR].name) - const ptreve = Mapping.addSpaceToNonNumeric(sort.system.ptreve) - const diff = Mapping.addSpaceToNonNumeric(sort.system.difficulte) - return `${sort.name}${ptSeuil} (${caseTMR}) R${diff} r${ptreve}` - } - - static addSpaceToNonNumeric(value) { - return Number.isNumeric(value) || /[-\d].*/.match(String(value)) ? value : ' ' + Mapping.toVar(value) - } - - static toVar(value) { - return value.replace('variable', 'var') + const coutReve = 'r' + RdDItemSort.addSpaceToNonNumeric(sort.system.ptreve) + const diff = 'R' + RdDItemSort.addSpaceToNonNumeric(sort.system.difficulte) + return `${sort.name}${ptSeuil} (${caseTMR}) ${diff} ${coutReve}` } static bonusCase(sort) { diff --git a/module/item-sheet.js b/module/item-sheet.js index e8f3af78..e25aaddd 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -296,7 +296,7 @@ export class RdDItemSheet extends ItemSheet { )) break case ITEM_TYPES.competence: - formData['system.niveau'] = formData.system.niveau ?? formData.system.base + formData['system.niveau'] = formData['system.niveau'] ?? formData['system.base'] break } diff --git a/module/item-sort.js b/module/item-sort.js index 5519f657..fd7be217 100644 --- a/module/item-sort.js +++ b/module/item-sort.js @@ -2,19 +2,32 @@ import { Grammar } from "./grammar.js"; import { RdDItemCompetence } from "./item-competence.js"; import { ITEM_TYPES } from "./item.js"; import { Misc } from "./misc.js"; -import { FLEUVE_COORD, TMRType, TMRUtility } from "./tmr-utility.js"; +import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js"; -const VOIES_DRACONIC = [ +export const VOIES_DRACONIC = [ { code: 'O', label: "Voie d'Oniros", short: 'Oniros', ordre: 'a' }, { code: 'H', label: "Voie d'Hypnos", short: 'Hypnos', ordre: 'b' }, { code: 'N', label: "Voie de Narcos", short: 'Narcos', ordre: 'c' }, { code: 'T', label: "Voie de Thanatos", short: 'Thanatos', ordre: 'd' }, - { code: 'O/H/N/T', label: "Oniros/Hypnos/Narcos/Thanatos", short: 'Oniros/Hypnos/Narcos/Thanatos', ordre: 'e' }, - { code: 'O/H/N', label: "Oniros/Hypnos/Narcos", short: "Oniros/Hypnos/Narcos", ordre: 'f' } + { code: 'O/H/N/T', label: "Oniros/Hypnos/Narcos/Thanatos", short: 'O/H/N/T', ordre: 'e' }, + { code: 'O/H/N', label: "Oniros/Hypnos/Narcos", short: "O/H/N", ordre: 'f' } ] /* -------------------------------------------- */ export class RdDItemSort extends Item { + static preloadHandlebars() { + Handlebars.registerHelper('itemSort-spaceIfText', val => RdDItemSort.addSpaceToNonNumeric(val)) + Handlebars.registerHelper('itemSort-codeDraconic', voie => RdDItemSort.getCode(voie)) + Handlebars.registerHelper('itemSort-shortDraconic', voie => RdDItemSort.getShortVoie(voie)) + } + + static addSpaceToNonNumeric(value) { + return Number.isNumeric(value) || ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes( String(value).charAt[0]) ? value : ' ' + RdDItemSort.toVar(value) + } + + static toVar(value) { + return value ? value.replace('variable', 'var') : '' + } static getDraconicsSort(competencesDraconic, sort) { // se baser sur la voie du sort? @@ -33,20 +46,23 @@ export class RdDItemSort extends Item { return (VOIES_DRACONIC.find(it => it.code == code)?.ordre ?? '?') } - static getVoieCode(voie) { - return VOIES_DRACONIC.find(it => voie.name.includes(it.short))?.code ?? '?' + static getCodeVoie(voie) { + return VOIES_DRACONIC.find(it => [it.code, it.short, it.label].includes(voie))?.code ?? '?' } - static getCodeDraconic(sort, voies = ['O', 'H', 'N', 'T']) { + static getShortVoie(voie) { + return VOIES_DRACONIC.find(it => [it.code, it.short, it.label].includes(voie))?.short ?? voie + } + + static getCode(sort, codeVoies = ['O', 'H', 'N', 'T']) { switch (Grammar.toLowerCaseNoAccent(sort.name)) { case "lecture d'aura": case "detection d'aura": - return RdDItemSort.$voiesConnues('O/H/N/T', voies) + return RdDItemSort.$voiesConnues('O/H/N/T', codeVoies) case "annulation de magie": - return RdDItemSort.$voiesConnues('O/H/N', voies) + return RdDItemSort.$voiesConnues('O/H/N', codeVoies) } - const voie = VOIES_DRACONIC.find(it => it.label.includes(sort.system.draconic)) - return voie?.code ?? sort.system.draconic + return RdDItemSort.getCodeVoie(sort.system.draconic) } static $voiesConnues(voiesSort, voies) { diff --git a/module/migrations.js b/module/migrations.js index c608d08a..26c84756 100644 --- a/module/migrations.js +++ b/module/migrations.js @@ -5,7 +5,7 @@ import { Monnaie } from "./item-monnaie.js"; import { RdDItem, ITEM_TYPES } from "./item.js"; import { RdDTimestamp } from "./time/rdd-timestamp.js"; import { RdDRaretes } from "./item/raretes.js"; -import { RdDCalendrier } from "./time/rdd-calendrier.js"; +import { VOIES_DRACONIC } from "./item-sort.js"; class Migration { get code() { return "sample"; } @@ -530,6 +530,32 @@ class _11_2_20_MigrationAstrologie extends Migration { } } +class _12_0_24_MigrationVoieSorts extends Migration { + get code() { return "migration-voies-sorts" } + get version() { return "12.0.24" } + + async migrate() { + await this.applyItemsUpdates(items => items + .filter(it => ITEM_TYPES.sort == it.type) + .map(it => this.migrateSort(it)) + ) + } + migrateSort(it) { + return { + _id: it.id, + 'system.draconic': this.convertDraconic(it.system.draconic), + } + } + convertDraconic(draconic) { + for (let v of VOIES_DRACONIC) { + if ([v.label, v.short, v.code].includes(draconic)) { + return v.short + } + } + return draconic + } +} + export class Migrations { static getMigrations() { return [ diff --git a/module/rdd-main.js b/module/rdd-main.js index 0cfce70a..5b857b87 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -69,6 +69,7 @@ import { ExportScriptarium } from "./actor/export-scriptarium/export-scriptarium import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js" import { RdDActorExportSheet } from "./actor/export-scriptarium/actor-encart-sheet.js" import { RdDStatBlockParser } from "./apps/rdd-import-stats.js" +import { RdDItemSort } from "./item-sort.js" /** * RdD system @@ -122,6 +123,7 @@ export class SystemReveDeDragon { // preload handlebars templates RdDUtility.preloadHandlebarsTemplates() AppPersonnageAleatoire.preloadHandlebars() + RdDItemSort.preloadHandlebars() /* -------------------------------------------- */ ReglesOptionnelles.initSettings() diff --git a/templates/actor/hr-sorts.html b/templates/actor/hr-sorts.html index 4146cfcb..7cb9249f 100644 --- a/templates/actor/hr-sorts.html +++ b/templates/actor/hr-sorts.html @@ -4,14 +4,15 @@ {{#each (trier sorts) as |sort key|}}
  • - - {{sort.name}} - - {{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}} - - - {{#if sort.system.isrituel}}Rituel{{/if}} - {{sort.system.draconic}}/{{sort.system.difficulte}} + {{itemSort-shortDraconic sort.system.draconic}} + {{sort.name}}{{#if sort.system.isrituel}} + {{/if}} + + {{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}} + + R{{itemSort-spaceIfText sort.system.difficulte}} r{{itemSort-spaceIfText sort.system.ptreve}}
    +
    diff --git a/templates/enum-draconic.html b/templates/enum-draconic.html index b86b8839..a53391bc 100644 --- a/templates/enum-draconic.html +++ b/templates/enum-draconic.html @@ -1,6 +1,6 @@ {{#each (trier @root.competences) as |competence key|}} {{#if (eq competence.system.categorie 'draconic')}} - + {{/if}} {{/each}}