diff --git a/changelog.md b/changelog.md index 3502ecea..617693a9 100644 --- a/changelog.md +++ b/changelog.md @@ -4,8 +4,11 @@ - suppression du type de TMR "Inconnu" des feuilles de création de signes draconiques (ce type sert uniquement pour le cas où une case saisie à la main est incorrecte) - les jets de dés /rdd utilisent le mode de visibilité sélectionné -- Draconic - - Ne pas proposer les voies de Draconic à -11 pour lire un signe draconic +- Voies de Draconic + - Ne pas proposer les voies de Draconic à -11 pour lire un signe draconic ou lancer un sort + - Trier les voies par ordre décroissant pour le sorts à voies multiples + - Les rencontres et les maîtrises dans les TMR peuvent être vaincues sans + draconic si les voies sont négatives ## 13.0.47 - Les goûts et les couleurs d'Illisys diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 2fc58483..bd7dbacf 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -106,7 +106,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { montures: this.actor.listeMontures(), suivants: this.actor.listeSuivants() } - if (this.actor.getBestDraconic().system.niveau > -11 && !this.actor.isHautRevant()) { + if (this.actor.getDraconics().find(it => it.system.niveau > -11) && !this.actor.isHautRevant()) { ui.notifications.error(`${this.actor.name} a des compétences draconiques, mais pas le don de Haut-Rêve!
Ajoutez-lui la tête "Don de Haut-Rêve" pour lui permettre d'utiliser ses compétences et d'accéder aux terres médianes du rêve`); } diff --git a/module/actor.js b/module/actor.js index 841b8a65..02026dcf 100644 --- a/module/actor.js +++ b/module/actor.js @@ -41,7 +41,7 @@ import { RdDItemCompetence } from "./item-competence.js"; import { RdDItemSigneDraconique } from "./item/signedraconique.js"; import { RdDRencontre } from "./item/rencontre.js"; import { DialogSelect } from "./dialog-select.js"; -import { CATEGORIES_COMPETENCES, PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js"; +import { CATEGORIES_COMPETENCES, PAS_DE_DRACONIC, SANS_DRACONIC } from "./item/base-items.js"; import { RdDRollResult } from "./rdd-roll-result.js"; import { RdDInitiative } from "./initiative.mjs"; @@ -165,10 +165,9 @@ export class RdDActor extends RdDBaseActorSang { ? this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == CATEGORIES_COMPETENCES.draconic.key) : [] } - getBestDraconic() { return foundry.utils.duplicate([...this.getDraconics(), PAS_DE_DRACONIC].sort(Misc.descending(it => it.system.niveau)).find(it => true)) } getConjurationNaturelle() { - return new RdDItemCompetence(POSSESSION_SANS_DRACONIC) + return new RdDItemCompetence(SANS_DRACONIC) } isForceInsuffisante(forceRequise) { @@ -694,7 +693,7 @@ export class RdDActor extends RdDBaseActorSang { const rencontre = await game.system.rdd.rencontresTMR.getReveDeDragon(force); let rollData = { actor: this, - competence: this.getDraconicOuPossession().find(it => true), + competence: this.getBestDraconic(), canClose: false, rencontre: rencontre, tmr: true, diff --git a/module/actor/base-actor-reve.js b/module/actor/base-actor-reve.js index 02b0bd88..8a2af968 100644 --- a/module/actor/base-actor-reve.js +++ b/module/actor/base-actor-reve.js @@ -22,7 +22,7 @@ import { DialogValidationEncaissement } from "../dialog-validation-encaissement. import { RdDCombat } from "../rdd-combat.js"; import { RdDEmpoignade } from "../rdd-empoignade.js"; import { RdDPossession } from "../rdd-possession.js"; -import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, CATEGORIES_COMPETENCES_CREATURES } from "../item/base-items.js"; +import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, CATEGORIES_COMPETENCES_CREATURES, SANS_DRACONIC } from "../item/base-items.js"; import { RollDataAjustements } from "../rolldata-ajustements-v1.js"; import { MappingCreatureArme } from "../item/mapping-creature-arme.mjs"; import RollDialog from "../roll/roll-dialog.mjs"; @@ -102,17 +102,18 @@ export class RdDBaseActorReve extends RdDBaseActor { } getDraconics() { return [] } - getDraconicOuPossession() { + + getDraconicOuNaturel(options = {possession: false}) { return [ ...this.getDraconics(), ...this.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.isCompetencePossession()), - this.getConjurationNaturelle() + options.possession ? this.getConjurationNaturelle() : SANS_DRACONIC ].sort(Misc.descending(it => it.system.niveau)); } - getConjurations() { - return this.getDraconicOuPossession() - .map(it => this.toActionConjuration(it)) + getBestDraconic(options = {possession: false}) { + return this.getDraconicOuNaturel(options) + .find(it => true) } getConjurationNaturelle() { diff --git a/module/item-sort.js b/module/item-sort.js index 9f2efbfc..e01895db 100644 --- a/module/item-sort.js +++ b/module/item-sort.js @@ -70,20 +70,25 @@ export class RdDItemSort extends RdDItem { static diffReve(sort) { return RdDItemSort.toVar((sort.system.difficulte.match(/\-?(\d)+/) ? 'R' : 'R ') + sort.system.difficulte) } static coutReve(sort) { return RdDItemSort.toVar((Number.isInteger(sort.system.ptreve) || sort.system.ptreve.match(/(\d)+\+?/) ? 'r' : 'r ') + sort.system.ptreve) } static getDraconicsSort(competencesDraconic, sort) { - // se baser sur la voie du sort? - switch (Grammar.toLowerCaseNoAccent(sort.name)) { - case "lecture d'aura": - case "detection d'aura": - return competencesDraconic - case "annulation de magie": - return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it)) + + function getVoies() { + switch (Grammar.toLowerCaseNoAccent(sort.name)) { + case "lecture d'aura": + case "detection d'aura": + return competencesDraconic + case "annulation de magie": + return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it)) + default: + return sort.system.draconic.split('/').map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie)) + } } - const voies = sort.system.draconic.split('/') - return voies.map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie)) + return getVoies() + .filter(it => it.system.niveau > -11) + .sort(Misc.descending(it => it.system.niveau)) } static getBestDraconicSort(competencesDraconic, sort) { - return RdDItemSort.getDraconicsSort(competencesDraconic, sort).sort(Misc.descending(it => it.system.niveau)).find(it => true) + return RdDItemSort.getDraconicsSort(competencesDraconic, sort).find(it => true) } static getOrdreCode(code) { diff --git a/module/item/base-items.js b/module/item/base-items.js index f2ffb854..55519c8b 100644 --- a/module/item/base-items.js +++ b/module/item/base-items.js @@ -23,7 +23,7 @@ export const CATEGORIES_COMPETENCES_CREATURES = { possession: { key: 'possession', base: 0, label: "Possession" }, } -export const POSSESSION_SANS_DRACONIC = { +export const SANS_DRACONIC = { name: 'Sans draconic', type: ITEM_TYPES.competence, img: RDD_CONFIG.icons.possession, diff --git a/module/rdd-possession.js b/module/rdd-possession.js index 798fbd9e..7b029e6a 100644 --- a/module/rdd-possession.js +++ b/module/rdd-possession.js @@ -95,7 +95,7 @@ export class RdDPossession { } static selectCompetenceDraconicOuPossession(rollData, rollingActor) { - rollData.competence = rollingActor.getDraconicOuPossession().find(it => true); + rollData.competence = rollingActor.getBestDraconic({possession: true}) if (rollingActor.isCreatureOuEntite()) { rollData.carac = rollingActor.system.carac rollData.competence.system.defaut_carac = CARACS.REVE diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 6b8db0cc..02192bdf 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -682,7 +682,7 @@ export class RdDTMRDialog extends Dialog { if (this.isCaseHumide(tmr)) { let rollData = { actor: this.actor, - competence: foundry.utils.duplicate(this.actor.getBestDraconic()), + competence: this.actor.getBestDraconic(), tmr: tmr, canClose: false, diffLibre: -7, @@ -807,7 +807,7 @@ export class RdDTMRDialog extends Dialog { async _conquerir(tmr, options) { let rollData = { actor: this.actor, - competence: foundry.utils.duplicate(this.actor.getBestDraconic()), + competence: this.actor.getBestDraconic(), tmr: tmr, canClose: options.canClose ?? false, diffLibre: options.difficulte ?? -7, diff --git a/module/roll/roll-part-possession.mjs b/module/roll/roll-part-possession.mjs index 6e3ae905..412e0752 100644 --- a/module/roll/roll-part-possession.mjs +++ b/module/roll/roll-part-possession.mjs @@ -30,7 +30,7 @@ export class RollPartPossession extends RollPartSelect { choices(refs) { return refs.all } $getActorConjurations(rollData) { - const competences = rollData.active.actor.getDraconicOuPossession() + const competences = rollData.active.actor.getBestDraconic({possession: true}) return competences.map(RollPartPossession.extractPossession) }