forked from public/foundryvtt-reve-de-dragon
		
	Correction du mapping
- 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
This commit is contained in:
		| @@ -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", "")) | ||||
|   } | ||||
|   | ||||
| @@ -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 != '') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user