diff --git a/module/actor-sheet.js b/module/actor-sheet.js index b41baf20..19254bb0 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -214,6 +214,8 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { }); // Boutons spéciaux MJs this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) + this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) + this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) } diff --git a/module/actor.js b/module/actor.js index badb3492..ccd83847 100644 --- a/module/actor.js +++ b/module/actor.js @@ -38,6 +38,8 @@ import { RdDCoeur } from "./coeur/rdd-coeur.js"; import { DialogChoixXpCarac } from "./dialog-choix-xp-carac.js"; import { RdDItemArme } from "./item-arme.js"; import { RdDCombatManager } from "./rdd-combat.js"; +import { RdDItemTete } from "./item/tete.js"; +import { SystemCompendiums } from "./settings/system-compendiums.js"; export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre'] @@ -87,7 +89,7 @@ export class RdDActor extends RdDBaseActorSang { } $computeIsHautRevant() { - this.system.attributs.hautrevant.value = this.itemTypes['tete'].find(it => Grammar.equalsInsensitive(it.name, 'don de haut-reve')) + this.system.attributs.hautrevant.value = this.itemTypes[ITEM_TYPES.tete].find(it => RdDItemTete.isDonDeHautReve(it)) ? "Haut rêvant" : ""; } @@ -989,6 +991,16 @@ export class RdDActor extends RdDBaseActorSang { }); } + /* -------------------------------------------- */ + async addDonDeHautReve() { + if (!game.user.isGM || this.isHautRevant()) { + return + } + const donHR = await RdDItemTete.teteDonDeHautReve() + if (donHR) { + this.createEmbeddedDocuments('Item', [donHR.toObject()]) + } + } /* -------------------------------------------- */ async reinsertionAleatoire(raison, accessible = tmr => true) { diff --git a/module/apps/rdd-import-stats.js b/module/apps/rdd-import-stats.js index 894f594f..3ae01b1d 100644 --- a/module/apps/rdd-import-stats.js +++ b/module/apps/rdd-import-stats.js @@ -234,8 +234,7 @@ export class RdDStatBlockParser { }); if (hautRevant) { - let tetes = await SystemCompendiums.getWorldOrCompendiumItems("tete", "tetes-de-dragon-pour-tous-personnages") - let donHR = tetes.find(t => Grammar.equalsInsensitive(t.name, "Don de Haut-Rêve")) + const donHR = await RdDItemTete.teteDonDeHautReve() if (donHR) { items.push(donHR.toObject()); } diff --git a/module/item/tete.js b/module/item/tete.js new file mode 100644 index 00000000..f16598cb --- /dev/null +++ b/module/item/tete.js @@ -0,0 +1,25 @@ +import { Grammar } from "../grammar.js" +import { ITEM_TYPES, RdDItem } from "../item.js" +import { SystemCompendiums } from "../settings/system-compendiums.js" + +const DON_HAUT_REVE = "Don de Haut-Rêve" + +export class RdDItemTete extends RdDItem { + + static get defaultIcon() { + return "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp" + } + + static isDonDeHautReve(tete) { + return tete.type == ITEM_TYPES.tete && Grammar.equalsInsensitive(tete.name, DON_HAUT_REVE) + } + + static async teteDonDeHautReve() { + const tetes = await SystemCompendiums.getItems("tetes-de-dragon-pour-tous-personnages", ITEM_TYPES.tete) + const tete = tetes.find(it => RdDItemTete.isDonDeHautReve(it)) + if (!tete) { + ui.notifications.warn(`Impossible de trouver la tête "${DON_HAUT_REVE}", vérifiez le compendium de têtes pour tous personnages`) + } + return tete + } +} diff --git a/module/rdd-main.js b/module/rdd-main.js index 5b857b87..64f78328 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -70,6 +70,7 @@ import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire. import { RdDActorExportSheet } from "./actor/export-scriptarium/actor-encart-sheet.js" import { RdDStatBlockParser } from "./apps/rdd-import-stats.js" import { RdDItemSort } from "./item-sort.js" +import { RdDItemTete } from "./item/tete.js" /** * RdD system @@ -97,6 +98,7 @@ export class SystemReveDeDragon { ombre: RdDItemOmbre, poison: RdDItemPoison, queue: RdDItemQueue, + tete: RdDItemTete, rencontre: RdDRencontre, service: RdDItemService, signedraconique: RdDItemSigneDraconique, diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 59bc9809..01dd562e 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -145,8 +145,8 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html', diff --git a/module/settings/system-compendiums.js b/module/settings/system-compendiums.js index 663b3c5a..fba598ff 100644 --- a/module/settings/system-compendiums.js +++ b/module/settings/system-compendiums.js @@ -1,5 +1,6 @@ import { ChatUtility } from "../chat-utility.js"; import { HIDE_DICE, SYSTEM_RDD } from "../constants.js"; +import { Grammar } from "../grammar.js"; import { RdDItem } from "../item.js"; import { Misc } from "../misc.js"; import { RdDDice } from "../rdd-dice.js"; @@ -84,15 +85,14 @@ export class SystemCompendiums extends FormApplication { static async getWorldOrCompendiumItems(itemType, compendium) { let items = game.items.filter(it => it.type == itemType) if (compendium) { - const ids = items.map(it => it.id); - const names = items.map(it => it.name.toLowerCase()); - const compendiumItems = await SystemCompendiums.getItems(compendium); - items = items.concat(compendiumItems - .filter(it => it.type == itemType) + const ids = items.map(it => it.id) + const names = items.map(it => Grammar.toLowerCaseNoAccent(it.name)) + const compendiumItems = await SystemCompendiums.getItems(compendium, itemType) + return items.concat(compendiumItems .filter(it => !ids.includes(it.id)) - .filter(it => !names.includes(it.name.toLowerCase()))); + .filter(it => !names.includes(Grammar.equalsInsensitive(it.name)))) } - return items; + return items } static async loadDocument(document) { diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 58bf0955..9e772304 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -129,11 +129,10 @@
Attribuer la Tête de Dragon 'Don de Haut Rêve' pour rendre le personnage Haut-Rêvant.
- {{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs"}} {{/if}}Attribuer la Tête de Dragon + {{#if options.isGM}} + Don de Haut Rêve + {{else}} + 'Don de Haut Rêve' + {{/if}} + pour rendre le personnage Haut-Rêvant.
+{{/if}} +