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 .flex-group-center.flex-fatigue,
select,
button,
.item-checkbox,
#sidebar,
#players,
@ -2040,7 +2039,8 @@ button,
}
.system-foundryvtt-reve-de-dragon aside#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;
border-radius: 0.2rem;
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
* @extends {ActorSheet}
*/
export class RdDBaseActorSheet extends ActorSheet {
export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(ActorSheet.defaultOptions, {
return foundry.utils.mergeObject(foundry.appv1.sheets.ActorSheet.defaultOptions, {
classes: ["rdd", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],

View File

@ -734,7 +734,7 @@ export class RdDBaseActor extends Actor {
name: this.getAlias(),
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)));
}

View File

@ -7,7 +7,7 @@ import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.
export class RdDActorExportSheet extends RdDActorSheet {
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/blessure.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/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() {

View File

@ -26,7 +26,7 @@ const RANDOM_VALUES = {
export class AppPersonnageAleatoire extends FormApplication {
static preloadHandlebars() {
loadTemplates([
foundry.applications.handlebars.loadTemplates([
'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 RdDMonnaieSheet } from "./monnaie-sheet.mjs"
export { default as RdDMunitionSheet } from "./munition-sheet.mjs"
export { default as RdDTarotSheet } from "./tarot-sheet.mjs"

View File

@ -15,7 +15,7 @@ export default class RdDItemBaseSheet extends HandlebarsApplicationMixin(foundry
)
loadTemplates(Misc.distinct(handlebars))
}
static register(sheetClass) {
const itemType = sheetClass.ITEM_TYPE
Items.registerSheet(SYSTEM_RDD, sheetClass, {
@ -24,7 +24,7 @@ export default class RdDItemBaseSheet extends HandlebarsApplicationMixin(foundry
makeDefault: true
})
}
static registerAll(...sheetClasses) {
const handlebars = ["systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/header.hbs"]
sheetClasses.forEach(sheetClass => {
@ -32,13 +32,13 @@ export default class RdDItemBaseSheet extends HandlebarsApplicationMixin(foundry
t.handlebars().forEach(h => handlebars.push(h))
)
const itemType = sheetClass.ITEM_TYPE
Items.registerSheet(SYSTEM_RDD, sheetClass, {
foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, {
label: Misc.typeName('Item', itemType),
types: [itemType],
makeDefault: true
})
})
loadTemplates(Misc.distinct(handlebars))
foundry.applications.handlebars.loadTemplates(Misc.distinct(handlebars))
}
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 {
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}) {
@ -30,7 +30,7 @@ export class RdDTextEditor {
context.text = await manager.onReplaceRoll(context);
}
return await TextEditor.enrichHTML(context.text, {
return await foundry.applications.ux.TextEditor.implementation.enrichHTML(context.text, {
relativeTo: object,
secrets: object?.isOwner,
async: true

View File

@ -5,12 +5,12 @@ import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
/**
* Class providing helper methods to get the list of users, and
* Class providing helper methods to get the list of users, and
*/
export class ChatUtility {
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))
}
@ -190,8 +190,8 @@ export class ChatUtility {
if (rddTimestamp) {
const timestamp = new RdDTimestamp(rddTimestamp);
const timestampData = timestamp.toCalendrier();
const dateHeure = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData);
html.find('header.message-header .message-sender').after(dateHeure)
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)
}
}

View File

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

View File

@ -1,2 +1,3 @@
export { default as RdDItemMonnaie } from "./monnaie.mjs"
export { default as RdDItemMunition } from "./munition.mjs"
export { default as RdDModelMonnaie } from "./monnaie.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
*/
export class RdDItemSheetV1 extends ItemSheet {
export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
static get ITEM_TYPE() {
return undefined
@ -31,7 +31,7 @@ export class RdDItemSheetV1 extends ItemSheet {
}
static register(sheetClass) {
Items.registerSheet(SYSTEM_RDD, sheetClass, {
foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, {
label: Misc.typeName('Item', sheetClass.ITEM_TYPE),
types: [sheetClass.ITEM_TYPE],
makeDefault: true

View File

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

View File

@ -1,2 +1,3 @@
export { default as RdDModelMonnaie } from "./monnaie.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',
'.echec-total-attaque',
]) {
html.on("click", button, event => {
$(html).on("click", button, event => {
const rddCombat = RdDCombat.rddCombatForAttackerAndDefender(
event.currentTarget.attributes['data-attackerId']?.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();
RdDCombat._callJetDeVie(event);
});
@ -934,7 +934,7 @@ export class RdDCombat {
let defenses = defender.items.filter(it => RdDItemArme.isParade(it))
defenses = foundry.utils.duplicate(defenses)
defenses.forEach(armeDefense => {
// Ajout du # d'utilisation ce round
// Ajout du # d'utilisation ce round
armeDefense.nbUsage = defender.getItemUse(armeDefense.id)
armeDefense.typeParade = RdDItemArme.defenseArmeParade(armeAttaque, armeDefense)
})

View File

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

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]
/** De pour les jets de rencontre */
export class DeTMR extends Die {
export class DeTMR extends foundry.dice.terms.Die {
/** @override */
static DENOMINATION = "t";
@ -50,7 +50,7 @@ export class DeTMR extends Die {
}
/** DeDraconique pour le D8 sans limite avec 8=>0 */
export class DeDraconique extends Die {
export class DeDraconique extends foundry.dice.terms.Die {
/** @override */
static DENOMINATION = "r";
@ -89,7 +89,7 @@ export class DeDraconique extends Die {
}
/** De 12 avec les heures */
export class DeHeure extends Die {
export class DeHeure extends foundry.dice.terms.Die {
/** @override */
static DENOMINATION = "h";

View File

@ -15,36 +15,36 @@ export class RdDEmpoignade {
/* -------------------------------------------- */
static registerChatCallbacks(html) {
html.on("click", '.defense-empoignade-cac', event => {
$(html).on("click", '.defense-empoignade-cac', event => {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
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 rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
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 defenderId = event.currentTarget.attributes['data-defenderId'].value
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 rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.entrainerAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
});
html.on("click", '.empoignade-projeter-sol', event => {
$(html).on("click", '.empoignade-projeter-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.projeterAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
});
html.on("change", '.empoignade-perte-endurance', event => {
$(html).on("change", '.empoignade-perte-endurance', event => {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
if (event.currentTarget.value && event.currentTarget.value != "none") {

View File

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

View File

@ -268,7 +268,7 @@ export class RdDResolutionTable {
maxCarac = Math.min(maxCarac, minCarac + 20);
minLevel = Math.max(minLevel, -10);
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,
difficulte: level,
min: minLevel,

View File

@ -12,6 +12,6 @@ export class RdDRollResult {
static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') {
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._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 => { } };
if (dialogConfig.close) {
@ -145,7 +145,7 @@ export class RdDRoll extends Dialog {
}
if (this.rollData.selectedSort) {
this.setSelectedSort(this.rollData.selectedSort);
this.html.find(".draconic").val(this.rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer
this.html.find(".draconic").val(this.rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer
}
RdDItemSort.setCoutReveReel(this.rollData.selectedSort);
this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre));
@ -344,7 +344,7 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */
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) {
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) {
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({
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();

View File

@ -349,7 +349,7 @@ export class RdDUtility {
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
loadTemplates(templatePaths);
foundry.applications.handlebars.loadTemplates(templatePaths);
}
static getItem(itemId, actorId = undefined) {
@ -733,14 +733,14 @@ export class RdDUtility {
RdDTextEditor.registerChatCallbacks(html)
// 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 actorId = event.currentTarget.attributes['data-actor-id'].value;
let actor = game.actors.get(actorId);
actor.tmrApp.positionnerDemiReve(coord);
});
// 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 sortId = event.currentTarget.attributes['data-sort-id'].value;
let actorId = event.currentTarget.attributes['data-actor-id'].value;
@ -750,7 +750,7 @@ export class RdDUtility {
});
// 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 defenderId = event.currentTarget.attributes['data-defenderId'].value
let possessionId = event.currentTarget.attributes['data-possessionId'].value
@ -758,16 +758,16 @@ export class RdDUtility {
});
// gestion bouton tchat Acheter
html.on("click", '.button-acheter', event => {
$(html).on("click", '.button-acheter', event => {
const venteData = DialogItemAchat.preparerAchat(event.currentTarget);
if (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
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 actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
if (actor) {
@ -775,7 +775,7 @@ export class RdDUtility {
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 id = htmlElement?.data("id");
const doctype = htmlElement?.data("doctype");

View File

@ -22,8 +22,8 @@ export class TMRRencontres {
/* -------------------------------------------- */
/**
* Retourne une recontre en fonction de la case et du tirage
* @param {*} terrain
* @param {*} forcedRoll
* @param {*} terrain
* @param {*} forcedRoll
*/
async rollRencontre(terrain, forcedRoll) {
const tmrType = TMRUtility.findTMRLike(terrain, { inclusMauvaise: true })?.type
@ -102,7 +102,7 @@ export class TMRRencontres {
/* -------------------------------------------- */
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,
rencontre,
@ -113,7 +113,7 @@ export class TMRRencontres {
});
const messageData = {
user: game.user.id,
type: CONST.CHAT_MESSAGE_TYPES.ROLL,
type: CONST.CHAT_MESSAGE_STYLES.ROLL,
roll: row.roll,
sound: CONFIG.sounds.dice,
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",
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
"compatibility": {
"minimum": "12",
"verified": "12"
"minimum": "13",
"verified": "13"
},
"description": "Rêve de Dragon RPG for FoundryVTT",
"authors": [

View File

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

View File

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

View File

@ -1,19 +1,16 @@
{{#unless system.isHidden}}
<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" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
<a class="list-item-label roll-competence flexrow" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
<img class="sheet-competence-img" src="{{img}}"/>
<span>{{name}}</span>
</a>
{{#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}}">
<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}}">
<i class="fas fa-arrow-alt-circle-up"></i>
</a>
{{/if}}
</span>
<input class="competence-value" type="text" compname="{{name}}" name="comp-value-{{name}}"
value="{{plusMoins system.niveau}}" data-dtype="number"
{{#if (or (not @root.options.vueDetaillee) @root.options.vueArchetype)}}disabled{{/if}} />
@ -24,7 +21,7 @@
value="{{numberFormat system.xp decimals=0 sign=false}}" data-dtype="number"
{{#if (or (not @root.options.vueDetaillee) @root.options.vueArchetype)}}disabled{{/if}} />
{{#unless system.isLevelUp}}
<span class="tooltiptext left-competence ttt-xp">Vous devez acquérir {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
<span class="tooltiptext left-competence ttt-xp">Vous devez acquérir {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
{{/unless}}
</span>
{{/if}}
@ -36,7 +33,7 @@
{{#if @root.options.vueDetaillee}}
<div class="item-controls">
{{#if system.stressXpMax}}
<a class="competence-stress-augmenter" compname="{{name}}"
<a class="competence-stress-augmenter" compname="{{name}}"
data-tooltip="Dépenser {{system.stressXpMax}} points de stress {{#if system.isStressLevelUp}} pour augmenter d'un niveau {{/if}}">
<i class="fas fa-arrow-alt-circle-up allouer-stress{{#if system.isStressLevelUp}}-level-up{{/if}}"></i>
</a>

View File

@ -1,7 +1,7 @@
{{#unless item.system.isHidden}}
{{#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}}">
<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')}}
<a>
<i class="{{~#if vide}}far fa-square