From 6819f1c2f56744d475d1ef830f84e7a7890f9f2e Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 27 Sep 2024 02:35:02 +0200 Subject: [PATCH] Correction du mapping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gestion des armes une/deux mains/lancées - dommages des armes une/deux mains - correction de la voie de draconic - correction des bonus de cases - correction des retours à la ligne --- .../export-scriptarium/export-scriptarium.js | 6 +- module/actor/export-scriptarium/mapping.js | 82 ++++++++++--------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/module/actor/export-scriptarium/export-scriptarium.js b/module/actor/export-scriptarium/export-scriptarium.js index 55b6dba2..e6cd20ce 100644 --- a/module/actor/export-scriptarium/export-scriptarium.js +++ b/module/actor/export-scriptarium/export-scriptarium.js @@ -1,4 +1,3 @@ -import { LOG_HEAD } from "../../constants.js" import { ACTOR_TYPES } from "../../item.js" import { Misc } from "../../misc.js" import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js" @@ -28,6 +27,7 @@ export class ExportScriptarium { callback: target => this.exportActors(this.$getActors(actorDirectory, target), this.$getTargetName(actorDirectory, target)) }) } + $getTargetName(actorDirectory, target) { const li = target.closest(".directory-item") const folderId = li.data("folderId") @@ -36,6 +36,7 @@ export class ExportScriptarium { ? game.actors.get(actorId).name : actorDirectory.folders.find(it => it.id == folderId).name } + $getActors(actorDirectory, target) { const li = target.closest(".directory-item") const folderId = li.data("folderId") @@ -49,7 +50,7 @@ export class ExportScriptarium { } exportActors(actors, targetName) { - const eol = '\n\r' + const eol = '\n' const header = Misc.join(this.getHeaderLine(), ';') const actorLines = actors.map(actor => Misc.join(this.getActorLine(actor), ';')) const data = Misc.join([header, ...actorLines], eol) @@ -64,6 +65,7 @@ export class ExportScriptarium { getActorLine(actor) { const context = Mapping.prepareContext(actor) return this.mapping.map(it => it.getter(actor, context)) + //.map(it => JSON.stringify(it)) .map(it => this.$escapeQuotes(it)) .map(it => it.replaceAll("\n", " ").replaceAll("\r", "")) } diff --git a/module/actor/export-scriptarium/mapping.js b/module/actor/export-scriptarium/mapping.js index ea0cca8c..e667d81b 100644 --- a/module/actor/export-scriptarium/mapping.js +++ b/module/actor/export-scriptarium/mapping.js @@ -5,8 +5,8 @@ import { RdDItemSort } from "../../item-sort.js" import { ITEM_TYPES } from "../../item.js" import { Misc } from "../../misc.js" import { RdDTimestamp } from "../../time/rdd-timestamp.js" -import { TMRConstants } from "../../tmr-constants.js" -import { TMRUtility } from "../../tmr-utility.js" +import { RdDBonus } from "../../rdd-bonus.js" + const CATEGORIES_COMPETENCES = [ "generale", @@ -80,8 +80,7 @@ const MAPPING_BASE = [ { column: "armure", getter: (actor, context) => Mapping.getArmure(actor, context) }, { column: "protection", getter: (actor, context) => Mapping.getProtectionArmure(actor, context) }, { column: "malus-armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) }, - { column: "esquive", getter: (actor, context) => Mapping.getEsquive(actor, context) }, - { column: "esquive-niv", getter: (actor, context) => Mapping.getEsquiveNiveau(context) }, + { column: "esquive", getter: (actor, context) => Mapping.getEsquiveNiveau(context) }, { column: "competences", getter: (actor, context) => Mapping.getCompetences(actor, CATEGORIES_COMPETENCES) }, { column: "draconic", getter: (actor, context) => Mapping.getCompetences(actor, CATEGORIES_DRACONIC) }, ] @@ -89,7 +88,7 @@ const MAPPING_BASE = [ const MAPPING_ARMES = TABLEAU_ARMES.map(i => ColumnMappingFactory.createMappingArme('name', i)) .concat(TABLEAU_ARMES.map(i => ColumnMappingFactory.createMappingArme('niveau', i))) .concat(TABLEAU_ARMES.map(i => ColumnMappingFactory.createMappingArme('init', i))) - .concat(TABLEAU_ARMES.map(i => ColumnMappingFactory.createMappingArme('dom', i))) + .concat(TABLEAU_ARMES.map(i => ColumnMappingFactory.createMappingArme('dommages', i))) const MAPPING_SORTS = TABLEAU_SORTS.map(i => ColumnMappingFactory.createMappingSort('voie', i)) .concat(TABLEAU_SORTS.map(i => ColumnMappingFactory.createMappingSort('description', i))) .concat(TABLEAU_SORTS.map(i => ColumnMappingFactory.createMappingSort('bonus', i))) @@ -113,29 +112,36 @@ export class Mapping { } static prepareArmes(actor) { - return actor.items.filter(it => it.type == ITEM_TYPES.arme) - .map(arme => { - // TODO: gestion armes 1 ou 2 mains - const compToUse = RdDItemArme.getCompetenceArme(arme, 'competence'); - const comp = actor.getCompetence(compToUse); - const bonusDom = Mapping.calculBonusDom(comp, actor) - return { - name: arme.name, - niveau: comp.system.niveau, - init: Mapping.calculBaseInit(actor, comp.system.categorie) + comp.system.niveau, - dom: Number(arme.system.dommages) + bonusDom - }; - }); + const armes = actor.items.filter(it => it.type == ITEM_TYPES.arme) + return armes.map(arme => + [ + arme.system.tir != "" ? Mapping.prepareArme(actor, arme, 'tir') : undefined, + arme.system.lancer = "" ? Mapping.prepareArme(actor, arme, 'lancer') : undefined, + arme.system.unemain ? Mapping.prepareArme(actor, arme, 'unemain') : undefined, + arme.system.deuxmains ? Mapping.prepareArme(actor, arme, 'deuxmains') : undefined, + !(arme.system.unemain || arme.system.deuxmains) ? Mapping.prepareArme(actor, arme, 'competence') : undefined + ] + .filter(it => it != undefined) + ).reduce((a, b) => a.concat(b), []) } - static calculBonusDom(comp, actor) { - // TODO: reuse dmg calc? - const appliesBonusDom = ['melee', 'lancer'].includes(comp.system.categorie) - return appliesBonusDom ? Number(actor.system.attributs.plusdom.value) : 0 + static prepareArme(actor, arme, maniement) { + const nameCompArme = RdDItemArme.getCompetenceArme(arme, maniement) + const competence = actor.getCompetence(nameCompArme) + if (RdDItemCompetence.isNiveauBase(competence)) { + return undefined + } + const dmgArme = RdDItemArme.dommagesReels(arme, maniement) + const dommages = dmgArme + RdDBonus.bonusDmg(actor, maniement, dmgArme) + return { + name: arme.name, + niveau: Misc.toSignedString(competence.system.niveau), + init: Mapping.calculBaseInit(actor, competence.system.categorie) + competence.system.niveau, + dommages: Misc.toSignedString(dommages) + } } static calculBaseInit(actor, categorie) { - // TODO: reuse init calc? const mapping = MAPPING_BASE.find(it => it.column == categorie) if (mapping) { switch (categorie) { @@ -175,20 +181,22 @@ export class Mapping { const esquive = esquives[0] return { name: esquive.name, - niveau: esquive.system.niveau + niveau: Misc.toSignedString(esquive.system.niveau) } } return undefined } static prepareSorts(actor) { - return actor.itemTypes[ITEM_TYPES.sort].map(it => { - return { - voie: RdDItemSort.getCodeDraconic(it), - description: Mapping.descriptionSort(it), - bonus: Mapping.bonusCase(it) - } - }) + return actor.itemTypes[ITEM_TYPES.sort].map(it => Mapping.prepareSort(it)) + } + + static prepareSort(sort) { + return { + voie: RdDItemSort.getCodeDraconic(sort), + description: Mapping.descriptionSort(sort), + bonus: Mapping.bonusCase(sort) + } } static descriptionSort(sort) { @@ -198,11 +206,12 @@ export class Mapping { } static bonusCase(sort) { - const list = RdDItemSort.buildBonusCaseList(sort.system.bonuscase, false).sort(Misc.descending(it => it.bonus)) + const list = RdDItemSort.bonuscaseStringToList(sort.system.bonuscase).sort(Misc.descending(it => it.bonus)) if (list.length > 0) { const bonus = list[0] return `+${bonus.bonus}% en ${bonus.case}` } + return '' } static getDescription(actor) { @@ -233,10 +242,6 @@ export class Mapping { return context?.armure?.malus ?? 0 } - static getEsquive(actor, context) { - return context.esquive?.name ?? '' - } - static getEsquiveNiveau(context) { if (context.esquive) { const niveau = context.esquive.niveau + context.armure.malus @@ -260,9 +265,8 @@ export class Mapping { } const txtCategorieByNiveau = niveaux.map(niveau => { const names = Misc.join(byNiveau[niveau].map(it => it.name).sort(Misc.ascending()), ', ') - return names + ': ' + Misc.toSignedString(niveau) - } - ) + return names + ' ' + Misc.toSignedString(niveau) + }) const txtCategorie = Misc.join(txtCategorieByNiveau, ' / ') return txtCategorie }).filter(it => it != '')