Foundry v13 migraton, WIP

This commit is contained in:
LeRatierBretonnien 2025-05-14 22:09:35 +02:00
parent cc4cbbc771
commit 6b053b189b
33 changed files with 151 additions and 96 deletions

View File

@ -69,7 +69,6 @@
.sheet header.sheet-header .header-compteurs, .sheet header.sheet-header .header-compteurs,
.sheet header.sheet-header .flex-group-center.flex-fatigue, .sheet header.sheet-header .flex-group-center.flex-fatigue,
select, select,
button,
.item-checkbox, .item-checkbox,
#sidebar, #sidebar,
#players, #players,
@ -2040,7 +2039,8 @@ button,
} }
.system-foundryvtt-reve-de-dragon aside#tooltip { .system-foundryvtt-reve-de-dragon aside#tooltip {
background: var(--background-tooltip); background: var(--background-tooltip);
color: var(--color-text-dark-primary); /*color: var(--color-text-dark-primary);*/
color: rgba(100, 100, 50, 0.90);
font-size: 1rem; font-size: 1rem;
border-radius: 0.2rem; border-radius: 0.2rem;
padding: 0.4rem; padding: 0.4rem;

View File

@ -14,11 +14,11 @@ import { ItemAction } from "../item/item-actions.js";
* Extend the basic ActorSheet with some very simple modifications * Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet} * @extends {ActorSheet}
*/ */
export class RdDBaseActorSheet extends ActorSheet { export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(ActorSheet.defaultOptions, { return foundry.utils.mergeObject(foundry.appv1.sheets.ActorSheet.defaultOptions, {
classes: ["rdd", "sheet", "actor"], classes: ["rdd", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }], tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],

View File

@ -734,7 +734,7 @@ export class RdDBaseActor extends Actor {
name: this.getAlias(), name: this.getAlias(),
system: { description: this.system.description } system: { description: this.system.description }
} }
renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData) foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData)
.then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride))); .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride)));
} }

View File

@ -7,7 +7,7 @@ import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.
export class RdDActorExportSheet extends RdDActorSheet { export class RdDActorExportSheet extends RdDActorSheet {
static init() { static init() {
loadTemplates([ foundry.applications.handlebars.loadTemplates([
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs",
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs",
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs",
@ -21,7 +21,7 @@ export class RdDActorExportSheet extends RdDActorSheet {
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs",
"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs",
]) ])
Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" })
} }
static get defaultOptions() { static get defaultOptions() {

View File

@ -26,7 +26,7 @@ const RANDOM_VALUES = {
export class AppPersonnageAleatoire extends FormApplication { export class AppPersonnageAleatoire extends FormApplication {
static preloadHandlebars() { static preloadHandlebars() {
loadTemplates([ foundry.applications.handlebars.loadTemplates([
'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs',
]) ])
} }

View File

@ -1,4 +1,5 @@
export { default as RdDItemBaseSheet} from "./common-item-sheet.mjs" export { default as RdDItemBaseSheet} from "./common-item-sheet.mjs"
export { default as RdDMonnaieSheet } from "./monnaie-sheet.mjs" export { default as RdDMonnaieSheet } from "./monnaie-sheet.mjs"
export { default as RdDMunitionSheet } from "./munition-sheet.mjs" export { default as RdDMunitionSheet } from "./munition-sheet.mjs"
export { default as RdDTarotSheet } from "./tarot-sheet.mjs"

View File

@ -32,13 +32,13 @@ export default class RdDItemBaseSheet extends HandlebarsApplicationMixin(foundry
t.handlebars().forEach(h => handlebars.push(h)) t.handlebars().forEach(h => handlebars.push(h))
) )
const itemType = sheetClass.ITEM_TYPE const itemType = sheetClass.ITEM_TYPE
Items.registerSheet(SYSTEM_RDD, sheetClass, { foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, {
label: Misc.typeName('Item', itemType), label: Misc.typeName('Item', itemType),
types: [itemType], types: [itemType],
makeDefault: true makeDefault: true
}) })
}) })
loadTemplates(Misc.distinct(handlebars)) foundry.applications.handlebars.loadTemplates(Misc.distinct(handlebars))
} }
static get ITEM_TYPE() { return undefined } static get ITEM_TYPE() { return undefined }

View File

@ -0,0 +1,33 @@
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs";
import { ITEM_TYPES } from "../../constants.js";
import RdDItemBaseSheet from "./common-item-sheet.mjs";
export default class RdDTarotSheet extends RdDItemBaseSheet {
/** @override */
static get ITEM_TYPE() { return ITEM_TYPES.tarot }
static get TEMPLATES() { return [TEMPLATE_DESCRIPTION] }
/** @override */
static DEFAULT_OPTIONS = Object.assign({},
RdDItemBaseSheet.DEFAULT_OPTIONS,
{
classes: ["fvtt-rdd", "item", "tarot"],
position: { width: 400 },
window: { contentClasses: ["tarot-content"] }
})
/** @override */
static PARTS = {
main: {
template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/tarot.hbs",
},
}
/** @override */
async _prepareContext() {
return Object.assign(
await super._prepareContext(),
await TEMPLATE_DESCRIPTION.prepareContext(this.document)
)
}
}

View File

@ -13,7 +13,7 @@ const TEXT_ROLL_MANAGERS = [
export class RdDTextEditor { export class RdDTextEditor {
static registerChatCallbacks(html) { static registerChatCallbacks(html) {
html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event)) $(html).on("click", '.roll-text', async event => await RdDTextEditor.rollText(event))
} }
static async enrichHTML(text, object, options = {showlink:true}) { static async enrichHTML(text, object, options = {showlink:true}) {
@ -30,7 +30,7 @@ export class RdDTextEditor {
context.text = await manager.onReplaceRoll(context); context.text = await manager.onReplaceRoll(context);
} }
return await TextEditor.enrichHTML(context.text, { return await foundry.applications.ux.TextEditor.implementation.enrichHTML(context.text, {
relativeTo: object, relativeTo: object,
secrets: object?.isOwner, secrets: object?.isOwner,
async: true async: true

View File

@ -10,7 +10,7 @@ import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
export class ChatUtility { export class ChatUtility {
static async init() { static async init() {
Hooks.on("renderChatMessage", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg)) Hooks.on("renderChatMessageHTML", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg))
Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id)) Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id))
} }
@ -190,8 +190,8 @@ export class ChatUtility {
if (rddTimestamp) { if (rddTimestamp) {
const timestamp = new RdDTimestamp(rddTimestamp); const timestamp = new RdDTimestamp(rddTimestamp);
const timestampData = timestamp.toCalendrier(); const timestampData = timestamp.toCalendrier();
const dateHeure = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData); const dateHeure = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData);
html.find('header.message-header .message-sender').after(dateHeure) $(html).find('header.message-header .message-sender').after(dateHeure)
} }
} }

View File

@ -5,13 +5,13 @@ const INFO_COEUR = 'info-coeur';
export class RdDCoeur { export class RdDCoeur {
static registerChatCallbacks(html) { static registerChatCallbacks(html) {
html.on("click", 'a.accepter-tendre-moment', event => { $(html).on("click", 'a.accepter-tendre-moment', event => {
RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event)) RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event))
}) })
html.on("click", 'a.refuser-tendre-moment', event => { $(html).on("click", 'a.refuser-tendre-moment', event => {
RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event)) RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event))
}) })
html.on("click", 'a.perdre-point-coeur-douceur', event => { $(html).on("click", 'a.perdre-point-coeur-douceur', event => {
RdDCoeur.perdreEnDouceur( RdDCoeur.perdreEnDouceur(
RdDCoeur.extractInfoCoeur(event), RdDCoeur.extractInfoCoeur(event),
event.currentTarget.attributes['data-actor-id'].value) event.currentTarget.attributes['data-actor-id'].value)

View File

@ -1,2 +1,3 @@
export { default as RdDItemMonnaie } from "./monnaie.mjs" export { default as RdDModelMonnaie } from "./monnaie.mjs"
export { default as RdDItemMunition } from "./munition.mjs" export { default as RdDModelMunition } from "./munition.mjs"
export { default as RdDModelTarot } from "./tarot.mjs"

View File

@ -0,0 +1,7 @@
import { RdDItem } from "../item.js";
export default class RdDItemTarot extends RdDItem {
static get defaultIcon() {
return 'systems/foundryvtt-reve-de-dragon/icons/objets/tarot.webp'
}
}

View File

@ -18,7 +18,7 @@ import { ItemAction } from "./item/item-actions.js";
/** /**
* Extend the basic ItemSheet for RdD specific items * Extend the basic ItemSheet for RdD specific items
*/ */
export class RdDItemSheetV1 extends ItemSheet { export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
static get ITEM_TYPE() { static get ITEM_TYPE() {
return undefined return undefined
@ -31,7 +31,7 @@ export class RdDItemSheetV1 extends ItemSheet {
} }
static register(sheetClass) { static register(sheetClass) {
Items.registerSheet(SYSTEM_RDD, sheetClass, { foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, {
label: Misc.typeName('Item', sheetClass.ITEM_TYPE), label: Misc.typeName('Item', sheetClass.ITEM_TYPE),
types: [sheetClass.ITEM_TYPE], types: [sheetClass.ITEM_TYPE],
makeDefault: true makeDefault: true

View File

@ -3,10 +3,10 @@ import { SYSTEM_RDD } from "../constants.js";
import { Misc } from "../misc.js"; import { Misc } from "../misc.js";
export class RdDJournalSheet extends JournalTextPageSheet { export class RdDJournalSheet extends foundry.appv1.sheets.JournalTextPageSheet {
static register() { static register() {
DocumentSheetConfig.unregisterSheet(JournalEntryPage, "core", JournalTextPageSheet) foundry.applications.apps.DocumentSheetConfig.unregisterSheet(JournalEntryPage, "core", foundry.appv1.sheets.JournalTextPageSheet)
DocumentSheetConfig.registerSheet(JournalEntryPage, foundry.applications.apps.DocumentSheetConfig.registerSheet(JournalEntryPage,
SYSTEM_RDD, SYSTEM_RDD,
RdDJournalSheet, { RdDJournalSheet, {
types: ["text"], types: ["text"],

View File

@ -1,2 +1,3 @@
export { default as RdDModelMonnaie } from "./monnaie.mjs" export { default as RdDModelMonnaie } from "./monnaie.mjs"
export { default as RdDModelMunition } from "./munition.mjs" export { default as RdDModelMunition } from "./munition.mjs"
export { default as RdDModelTarot } from "./tarot.mjs"

18
module/models/tarot.mjs Normal file
View File

@ -0,0 +1,18 @@
import { TEMPLATE_DESCRIPTION } from "../common/_module.mjs";
import { DECIMAL, INTEGER, INTEGER_SIGNED, MODEL_ARRAY, STRING } from "../common/field-types.mjs"
const fields = foundry.data.fields
export default class RdDModelTarot extends foundry.abstract.TypeDataModel {
static defineSchema() {
let tarotFields = {
concept : new fields.StringField({ label: "Concept", initial: "", ...STRING }),
aspect : new fields.StringField({ label: "Aspect", initial: "", ...STRING }),
frequence : new fields.NumberField({ label: "Fréquence", initial: 1, ...INTEGER })
}
return Object.assign({},
TEMPLATE_DESCRIPTION.fields(),
tarotFields
)
}
}

View File

@ -483,7 +483,7 @@ export class RdDCombat {
'.appel-destinee-attaque', '.appel-destinee-attaque',
'.echec-total-attaque', '.echec-total-attaque',
]) { ]) {
html.on("click", button, event => { $(html).on("click", button, event => {
const rddCombat = RdDCombat.rddCombatForAttackerAndDefender( const rddCombat = RdDCombat.rddCombatForAttackerAndDefender(
event.currentTarget.attributes['data-attackerId']?.value, event.currentTarget.attributes['data-attackerId']?.value,
event.currentTarget.attributes['data-attackerTokenId']?.value, event.currentTarget.attributes['data-attackerTokenId']?.value,
@ -494,7 +494,7 @@ export class RdDCombat {
} }
}); });
} }
html.on("click", 'a.chat-jet-vie', event => { $(html).on("click", 'a.chat-jet-vie', event => {
event.preventDefault(); event.preventDefault();
RdDCombat._callJetDeVie(event); RdDCombat._callJetDeVie(event);
}); });

View File

@ -9,7 +9,7 @@ export class RdDCompendiumOrganiser {
console.log('onRenderCompendium', compendium, html, compendiumData); console.log('onRenderCompendium', compendium, html, compendiumData);
const pack = compendium.collection const pack = compendium.collection
if (pack.metadata.system === SYSTEM_RDD) { if (pack.metadata.system === SYSTEM_RDD) {
html.find('.directory-item').each((i, element) => { $(html).find('.directory-item').each((i, element) => {
RdDCompendiumOrganiser.setEntityTypeName(pack, element); RdDCompendiumOrganiser.setEntityTypeName(pack, element);
}); });
} }

View File

@ -12,7 +12,7 @@ const imgHeures = [1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12].map(heure => {
const imgSigneDragon = imgHeures[4] const imgSigneDragon = imgHeures[4]
/** De pour les jets de rencontre */ /** De pour les jets de rencontre */
export class DeTMR extends Die { export class DeTMR extends foundry.dice.terms.Die {
/** @override */ /** @override */
static DENOMINATION = "t"; static DENOMINATION = "t";
@ -50,7 +50,7 @@ export class DeTMR extends Die {
} }
/** DeDraconique pour le D8 sans limite avec 8=>0 */ /** DeDraconique pour le D8 sans limite avec 8=>0 */
export class DeDraconique extends Die { export class DeDraconique extends foundry.dice.terms.Die {
/** @override */ /** @override */
static DENOMINATION = "r"; static DENOMINATION = "r";
@ -89,7 +89,7 @@ export class DeDraconique extends Die {
} }
/** De 12 avec les heures */ /** De 12 avec les heures */
export class DeHeure extends Die { export class DeHeure extends foundry.dice.terms.Die {
/** @override */ /** @override */
static DENOMINATION = "h"; static DENOMINATION = "h";

View File

@ -15,36 +15,36 @@ export class RdDEmpoignade {
/* -------------------------------------------- */ /* -------------------------------------------- */
static registerChatCallbacks(html) { static registerChatCallbacks(html) {
html.on("click", '.defense-empoignade-cac', event => { $(html).on("click", '.defense-empoignade-cac', event => {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage); const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Corps à corps", "melee") RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Corps à corps", "melee")
}); });
html.on("click", '.defense-empoignade-esquive', event => { $(html).on("click", '.defense-empoignade-esquive', event => {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage); const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Esquive", "derobee") RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Esquive", "derobee")
}); });
html.on("click", '.empoignade-poursuivre', event => { $(html).on("click", '.empoignade-poursuivre', event => {
let attackerId = event.currentTarget.attributes['data-attackerId'].value let attackerId = event.currentTarget.attributes['data-attackerId'].value
let defenderId = event.currentTarget.attributes['data-defenderId'].value let defenderId = event.currentTarget.attributes['data-defenderId'].value
RdDEmpoignade.onAttaqueEmpoignadeValidee(game.actors.get(attackerId), game.actors.get(defenderId)) RdDEmpoignade.onAttaqueEmpoignadeValidee(game.actors.get(attackerId), game.actors.get(defenderId))
}); });
html.on("click", '.empoignade-entrainer-sol', event => { $(html).on("click", '.empoignade-entrainer-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage); const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.entrainerAuSol(rollData) RdDEmpoignade.entrainerAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id) ChatUtility.removeChatMessageId(chatMessage.id)
}); });
html.on("click", '.empoignade-projeter-sol', event => { $(html).on("click", '.empoignade-projeter-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage); const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.projeterAuSol(rollData) RdDEmpoignade.projeterAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id) ChatUtility.removeChatMessageId(chatMessage.id)
}); });
html.on("change", '.empoignade-perte-endurance', event => { $(html).on("change", '.empoignade-perte-endurance', event => {
const chatMessage = ChatUtility.getChatMessage(event); const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage); const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
if (event.currentTarget.value && event.currentTarget.value != "none") { if (event.currentTarget.value && event.currentTarget.value != "none") {

View File

@ -106,6 +106,7 @@ export class SystemReveDeDragon {
this.itemClasses = { this.itemClasses = {
monnaie: items.RdDItemMonnaie, monnaie: items.RdDItemMonnaie,
munition: items.RdDItemMunition, munition: items.RdDItemMunition,
tarot: items.RdDModelTarot,
armure: RdDItemArmure, armure: RdDItemArmure,
blessure: RdDItemBlessure, blessure: RdDItemBlessure,
gemme: RdDItemGemme, gemme: RdDItemGemme,
@ -187,6 +188,7 @@ export class SystemReveDeDragon {
CONFIG.Item.dataModels = { CONFIG.Item.dataModels = {
monnaie: models.RdDModelMonnaie, monnaie: models.RdDModelMonnaie,
munition: models.RdDModelMunition, munition: models.RdDModelMunition,
tarot: models.RdDModelTarot,
} }
CONFIG.RDD = { CONFIG.RDD = {
resolutionTable: RdDResolutionTable.resolutionTable, resolutionTable: RdDResolutionTable.resolutionTable,
@ -197,16 +199,16 @@ export class SystemReveDeDragon {
/* -------------------------------------------- */ /* -------------------------------------------- */
// Register sheet application classes // Register sheet application classes
Actors.unregisterSheet("core", ActorSheet) foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
Actors.registerSheet(SYSTEM_RDD, RdDCommerceSheet, { types: ["commerce"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDCommerceSheet, { types: ["commerce"], makeDefault: true })
Actors.registerSheet(SYSTEM_RDD, RdDActorSheet, { types: ["personnage"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorSheet, { types: ["personnage"], makeDefault: true })
Actors.registerSheet(SYSTEM_RDD, RdDCreatureSheet, { types: ["creature"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDCreatureSheet, { types: ["creature"], makeDefault: true })
Actors.registerSheet(SYSTEM_RDD, RdDActorVehiculeSheet, { types: ["vehicule"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorVehiculeSheet, { types: ["vehicule"], makeDefault: true })
Actors.registerSheet(SYSTEM_RDD, RdDActorEntiteSheet, { types: ["entite"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorEntiteSheet, { types: ["entite"], makeDefault: true })
Items.unregisterSheet("core", ItemSheet) foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet)
RdDActorExportSheet.init() RdDActorExportSheet.init()
Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, { foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, {
types: [ types: [
"objet", "arme", "armure", "livre", "nourritureboisson", "objet", "arme", "armure", "livre", "nourritureboisson",
], ],
@ -215,17 +217,18 @@ export class SystemReveDeDragon {
sheets.RdDItemBaseSheet.registerAll( sheets.RdDItemBaseSheet.registerAll(
sheets.RdDMonnaieSheet, sheets.RdDMonnaieSheet,
sheets.RdDMunitionSheet sheets.RdDMunitionSheet,
sheets.RdDTarotSheet
) )
Items.registerSheet(SYSTEM_RDD, RdDItemSheetV1, { foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, RdDItemSheetV1, {
types: [ types: [
"competence", "competencecreature", "competence", "competencecreature",
"recettealchimique", "musique", "chant", "danse", "jeu", "race", "recettealchimique", "musique", "chant", "danse", "jeu", "race",
"recettecuisine", "oeuvre", "meditation", "recettecuisine", "oeuvre", "meditation",
"queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve", "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
"nombreastral", "tache", "maladie", "poison", "possession", "nombreastral", "tache", "maladie", "poison", "possession",
"tarot", "extraitpoetique", "empoignade" "extraitpoetique", "empoignade"
], ],
makeDefault: true makeDefault: true
}) })

View File

@ -268,7 +268,7 @@ export class RdDResolutionTable {
maxCarac = Math.min(maxCarac, minCarac + 20); maxCarac = Math.min(maxCarac, minCarac + 20);
minLevel = Math.max(minLevel, -10); minLevel = Math.max(minLevel, -10);
maxLevel = Math.max(Math.min(maxLevel, 30), minLevel + colonnes); maxLevel = Math.max(Math.min(maxLevel, 30), minLevel + colonnes);
return await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', { return await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', {
carac: carac, carac: carac,
difficulte: level, difficulte: level,
min: minLevel, min: minLevel,

View File

@ -12,6 +12,6 @@ export class RdDRollResult {
static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') { static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') {
rollData.show = rollData.show || {}; rollData.show = rollData.show || {};
return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData); return await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData);
} }
} }

View File

@ -22,7 +22,7 @@ export class RdDRoll extends Dialog {
RdDRoll._ensureCorrectAction(action); RdDRoll._ensureCorrectAction(action);
RdDRoll._setDefaultOptions(actor, rollData); RdDRoll._setDefaultOptions(actor, rollData);
const html = await renderTemplate(dialogConfig.html, rollData); const html = await foundry.applications.handlebars.renderTemplate(dialogConfig.html, rollData);
let options = { classes: ["rdd-roll-dialog"], width: 650, height: 'fit-content', 'z-index': 99999, close: html => { } }; let options = { classes: ["rdd-roll-dialog"], width: 650, height: 'fit-content', 'z-index': 99999, close: html => { } };
if (dialogConfig.close) { if (dialogConfig.close) {
@ -344,7 +344,7 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
async buildAjustements(rollData) { async buildAjustements(rollData) {
return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs`, rollData); return await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs`, rollData);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -47,7 +47,7 @@ export class RdDTMRDialog extends Dialog {
static async create(actor, tmrData) { static async create(actor, tmrData) {
await PixiTMR.init() await PixiTMR.init()
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.hbs', tmrData); let html = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.hbs', tmrData);
if (tmrData.mode != 'visu' && !game.user.isGM) { if (tmrData.mode != 'visu' && !game.user.isGM) {
ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatUtility.getGMs() }); ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatUtility.getGMs() });
} }
@ -508,7 +508,7 @@ export class RdDTMRDialog extends Dialog {
ChatMessage.create({ ChatMessage.create({
whisper: ChatUtility.getOwners(this.actor), whisper: ChatUtility.getOwners(this.actor),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.hbs`, rencData) content: await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.hbs`, rencData)
}); });
this.$updateValuesDisplay(); this.$updateValuesDisplay();

View File

@ -349,7 +349,7 @@ export class RdDUtility {
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type)); Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord)); Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
loadTemplates(templatePaths); foundry.applications.handlebars.loadTemplates(templatePaths);
} }
static getItem(itemId, actorId = undefined) { static getItem(itemId, actorId = undefined) {
@ -733,14 +733,14 @@ export class RdDUtility {
RdDTextEditor.registerChatCallbacks(html) RdDTextEditor.registerChatCallbacks(html)
// Gestion spécifique message passeurs // Gestion spécifique message passeurs
html.on("click", '.tmr-passeur-coord a', event => { $(html).on("click", '.tmr-passeur-coord a', event => {
let coord = event.currentTarget.attributes['data-tmr-coord'].value; let coord = event.currentTarget.attributes['data-tmr-coord'].value;
let actorId = event.currentTarget.attributes['data-actor-id'].value; let actorId = event.currentTarget.attributes['data-actor-id'].value;
let actor = game.actors.get(actorId); let actor = game.actors.get(actorId);
actor.tmrApp.positionnerDemiReve(coord); actor.tmrApp.positionnerDemiReve(coord);
}); });
// Gestion spécifique des sorts en réserve multiples (ie têtes) // Gestion spécifique des sorts en réserve multiples (ie têtes)
html.on("click", '.declencher-sort-reserve', event => { $(html).on("click", '.declencher-sort-reserve', event => {
let coord = event.currentTarget.attributes['data-tmr-coord'].value; let coord = event.currentTarget.attributes['data-tmr-coord'].value;
let sortId = event.currentTarget.attributes['data-sort-id'].value; let sortId = event.currentTarget.attributes['data-sort-id'].value;
let actorId = event.currentTarget.attributes['data-actor-id'].value; let actorId = event.currentTarget.attributes['data-actor-id'].value;
@ -750,7 +750,7 @@ export class RdDUtility {
}); });
// gestion bouton tchat Possession // gestion bouton tchat Possession
html.on("click", '.defense-possession', event => { $(html).on("click", '.defense-possession', event => {
let attackerId = event.currentTarget.attributes['data-attackerId'].value let attackerId = event.currentTarget.attributes['data-attackerId'].value
let defenderId = event.currentTarget.attributes['data-defenderId'].value let defenderId = event.currentTarget.attributes['data-defenderId'].value
let possessionId = event.currentTarget.attributes['data-possessionId'].value let possessionId = event.currentTarget.attributes['data-possessionId'].value
@ -758,16 +758,16 @@ export class RdDUtility {
}); });
// gestion bouton tchat Acheter // gestion bouton tchat Acheter
html.on("click", '.button-acheter', event => { $(html).on("click", '.button-acheter', event => {
const venteData = DialogItemAchat.preparerAchat(event.currentTarget); const venteData = DialogItemAchat.preparerAchat(event.currentTarget);
if (venteData) { if (venteData) {
DialogItemAchat.onAcheter(venteData); DialogItemAchat.onAcheter(venteData);
} }
}); });
html.on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event)); $(html).on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event));
// Gestion du bouton payer // Gestion du bouton payer
html.on("click", '.payer-button', event => { $(html).on("click", '.payer-button', event => {
let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0); let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0);
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:"); let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
if (actor) { if (actor) {
@ -775,7 +775,7 @@ export class RdDUtility {
ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget)); ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget));
} }
}); });
html.on("click", '.rdd-world-content-link', async event => { $(html).on("click", '.rdd-world-content-link', async event => {
const htmlElement = html.find(event.currentTarget); const htmlElement = html.find(event.currentTarget);
const id = htmlElement?.data("id"); const id = htmlElement?.data("id");
const doctype = htmlElement?.data("doctype"); const doctype = htmlElement?.data("doctype");

View File

@ -102,7 +102,7 @@ export class TMRRencontres {
/* -------------------------------------------- */ /* -------------------------------------------- */
async $chatRolledRencontre(row, rencontre, tmr) { async $chatRolledRencontre(row, rencontre, tmr) {
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.hbs', const flavorContent = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.hbs',
{ {
roll: row.roll, roll: row.roll,
rencontre, rencontre,
@ -113,7 +113,7 @@ export class TMRRencontres {
}); });
const messageData = { const messageData = {
user: game.user.id, user: game.user.id,
type: CONST.CHAT_MESSAGE_TYPES.ROLL, type: CONST.CHAT_MESSAGE_STYLES.ROLL,
roll: row.roll, roll: row.roll,
sound: CONFIG.sounds.dice, sound: CONFIG.sounds.dice,
content: flavorContent content: flavorContent

View File

@ -6,8 +6,8 @@
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/13.0.0/system.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/13.0.0/system.json",
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
"compatibility": { "compatibility": {
"minimum": "12", "minimum": "13",
"verified": "12" "verified": "13"
}, },
"description": "Rêve de Dragon RPG for FoundryVTT", "description": "Rêve de Dragon RPG for FoundryVTT",
"authors": [ "authors": [

View File

@ -1062,12 +1062,6 @@
"part": 10 "part": 10
} }
}, },
"tarot": {
"templates": ["description"],
"concept": "",
"aspect": "",
"frequence": 1
},
"nombreastral": { "nombreastral": {
"value": 0, "value": 0,
"istrue": false, "istrue": false,

View File

@ -12,8 +12,8 @@
data-arme-name="{{arme.name}}" data-arme-name="{{arme.name}}"
data-competence-name="{{arme.system.competence}}" data-competence-name="{{arme.system.competence}}"
data-tooltip="{{arme.name}}: niveau {{plusMoins arme.system.niveau}}"> data-tooltip="{{arme.name}}: niveau {{plusMoins arme.system.niveau}}">
<span class="list-item-label"> <span class="list-item-label flexrow">
<a class="roll-arme"> <a class="roll-arme flexrow">
{{#if arme.img}} {{#if arme.img}}
<img class="sheet-competence-img" src="{{arme.img}}" data-tooltip="{{arme.name}}"/> <img class="sheet-competence-img" src="{{arme.img}}" data-tooltip="{{arme.name}}"/>
{{/if}} {{/if}}
@ -31,8 +31,8 @@
{{#each esquives as |esq key|}} {{#each esquives as |esq key|}}
<li class="item flexrow list-item" data-item-id="{{esq._id}}" <li class="item flexrow list-item" data-item-id="{{esq._id}}"
data-tooltip="{{esq.name}}: niveau {{plusMoins esq.system.niveau}}"> data-tooltip="{{esq.name}}: niveau {{plusMoins esq.system.niveau}}">
<span class="list-item-label"> <span class="list-item-label flexrow">
<a class="roll-competence" name="{{esq.name}}"> <a class="roll-competence flexrow" name="{{esq.name}}">
<img class="sheet-competence-img" src="{{esq.img}}" /> <img class="sheet-competence-img" src="{{esq.img}}" />
<span>{{esq.name}}</span> <span>{{esq.name}}</span>
</a> </a>

View File

@ -1,18 +1,15 @@
{{#unless system.isHidden}} {{#unless system.isHidden}}
<li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up{{/if}}" data-item-id="{{_id}}"> <li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up{{/if}}" data-item-id="{{_id}}">
<span class="tooltip"> <a class="list-item-label roll-competence flexrow" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
<a class="list-item-label roll-competence" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
<img class="sheet-competence-img" src="{{img}}"/> <img class="sheet-competence-img" src="{{img}}"/>
<span>{{name}}</span> <span>{{name}}</span>
</a> </a>
{{#if system.isLevelUp}} {{#if system.isLevelUp}}
<span class="tooltiptext ttt-levelup">Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span> <a class="competence-xp-augmenter" compname="{{name}}" data-tooltip="Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}">
<a class="competence-xp-augmenter" compname="{{name}}">
<i class="fas fa-arrow-alt-circle-up"></i> <i class="fas fa-arrow-alt-circle-up"></i>
</a> </a>
{{/if}} {{/if}}
</span>
<input class="competence-value" type="text" compname="{{name}}" name="comp-value-{{name}}" <input class="competence-value" type="text" compname="{{name}}" name="comp-value-{{name}}"
value="{{plusMoins system.niveau}}" data-dtype="number" value="{{plusMoins system.niveau}}" data-dtype="number"

View File

@ -1,7 +1,7 @@
{{#unless item.system.isHidden}} {{#unless item.system.isHidden}}
{{#if (or options.isObserver (ne item.type 'monnaie'))}} {{#if (or options.isObserver (ne item.type 'monnaie'))}}
<li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true" data-tooltip="{{#if (gt item.system.quantite 1)}}{{item.system.quantite}} {{/if}}{{item.name}}"> <li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true" data-tooltip="{{#if (gt item.system.quantite 1)}}{{item.system.quantite}} {{/if}}{{item.name}}">
<span class="equipement-nom {{#if (eq item.type 'conteneur')}}conteneur-name{{/if}} "> <span class="equipement-nom flexrow {{#if (eq item.type 'conteneur')}}conteneur-name{{/if}} ">
{{#if (eq item.type 'conteneur')}} {{#if (eq item.type 'conteneur')}}
<a> <a>
<i class="{{~#if vide}}far fa-square <i class="{{~#if vide}}far fa-square