diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 19837d4e..15b7f27c 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -65,8 +65,9 @@ export class RdDActorSheet extends ActorSheet { // Compute current carac sum let sum = 0; - for (let caracName in data.data.carac) { - let currentCarac = data.data.carac[caracName]; + let caracList = data.data.data.carac; + for (let caracName in caracList) { + let currentCarac = caracList[caracName]; if (!currentCarac.derivee) { sum += parseInt(currentCarac.value); } @@ -106,9 +107,10 @@ export class RdDActorSheet extends ActorSheet { } this.armesList = duplicate(data.data.combat); - data.data.carac.taille.isTaille = true; // To avoid button link; - data.data.compteurs.chance.isChance = true; - data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.blessures); + caracList.isTaille = true; // To avoid button link; + let compteursList = data.data.data.compteurs + compteursList.chance.isChance = true; + data.data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.data.blessures); // Mise à jour de l'encombrement total et du prix de l'équipement this.actor.computeEncombrementTotalEtMalusArmure(); @@ -125,16 +127,16 @@ export class RdDActorSheet extends ActorSheet { // low is normal, this the base used to compute the grid. data.data.fatigue = { - malus: RdDUtility.calculMalusFatigue(data.data.sante.fatigue.value, data.data.sante.endurance.max), - html: "" + RdDUtility.makeHTMLfatigueMatrix(data.data.sante.fatigue.value, data.data.sante.endurance.max).html() + "
" + malus: RdDUtility.calculMalusFatigue(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max), + html: "" + RdDUtility.makeHTMLfatigueMatrix(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max).html() + "
" } RdDUtility.filterItemsPerTypeForSheet(data); - data.data.sortReserve = data.data.reve.reserve.list; - data.data.rencontres = duplicate(data.data.reve.rencontre.list); + data.data.sortReserve = data.data.data.reve.reserve.list; + data.data.rencontres = duplicate(data.data.data.reve.rencontre.list); data.data.caseSpeciales = data.itemsByType['casetmr']; RdDUtility.buildArbreDeConteneur(this, data); - data.data.surEncombrementMessage = (data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : ""; + data.data.surEncombrementMessage = (data.data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : ""; data.data.vehiculesList = this.actor.buildVehiculesList(); data.data.monturesList = this.actor.buildMonturesList(); data.data.suivantsList = this.actor.buildSuivantsList(); @@ -199,7 +201,7 @@ export class RdDActorSheet extends ActorSheet { html.find('.item-edit').click(ev => { const li = $(ev.currentTarget).parents(".item"); - const item = this.actor.getOwnedItem(li.data("item-id")); + const item = this.actor.items.get(li.data("item-id")); item.sheet.render(true); }); // Update Inventory Item diff --git a/module/actor.js b/module/actor.js index 31385304..b6c9ed62 100644 --- a/module/actor.js +++ b/module/actor.js @@ -60,6 +60,8 @@ export class RdDActor extends Actor { if (data instanceof Array) { return super.create(data, options); } + console.log("****************************************************"); + // If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic if (data.items) { let actor = super.create(data, options); @@ -150,25 +152,28 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async checkMonnaiePresence(items) { // Ajout opportuniste si les pièces n'existent pas. if (!items) return; // Sanity check during import - let piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1); + //console.log("NO MONNAIR FOUND!!!!", items); + + let piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1 ); let newMonnaie = []; if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Etain (1 denier)", 1, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 10); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 10); if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Bronze (10 deniers)", 10, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 100); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 100); if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Argent (1 sol)", 100, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp")); } - piece = items.find(item => item.type == 'monnaie' && Number(item.data.valeur_deniers) == 1000); + piece = items.find(item => item.data.type == 'monnaie' && Number(item.data.data.valeur_deniers) == 1000); if (!piece) { newMonnaie.push(RdDUtility.createMonnaie("Or (10 sols)", 1000, "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp")); } if (newMonnaie.length > 0) { - await this.createOwnedItem(newMonnaie); + await this.createEmbeddedDocuments("Item", newMonnaie ); + //await this.createOwnedItem(newMonnaie); } } @@ -304,7 +309,7 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ getBestDraconic() { - const list = this.getDraconicList().sort((a, b) => b.data.niveau - a.data.niveau); + const list = this.getDraconicList().sort((a, b) => b.data.data.niveau - a.data.data.niveau); if (list.length == 0) { return { name: "none", data: { niveau: -11 } }; } @@ -750,8 +755,8 @@ export class RdDActor extends Actor { content: message }); } - const update = { _id: comp._id, 'data.niveau': maxNiveau }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + const update = [ { _id: comp.id, 'data.niveau': maxNiveau } ]; + await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity } else { console.log("Competence not found", compName); } @@ -762,8 +767,8 @@ export class RdDActor extends Actor { let comp = this.getCompetence(compName); if (comp) { this.checkCompetenceXP(compName, compValue); - const update = { _id: comp._id, 'data.xp': compValue }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + const update = [ { _id: comp.id, 'data.xp': compValue } ]; + await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity } else { console.log("Competence not found", compName); } @@ -774,8 +779,8 @@ export class RdDActor extends Actor { async updateCompetenceXPSort(compName, compValue) { let comp = this.getCompetence(compName); if (comp) { - const update = { _id: comp._id, 'data.xp_sort': compValue }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + const update = [ { _id: comp.id, 'data.xp_sort': compValue } ]; + await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity } else { console.log("Competence not found", compName); } @@ -785,8 +790,8 @@ export class RdDActor extends Actor { async updateCompetenceArchetype(compName, compValue) { let comp = this.getCompetence(compName); if (comp) { - const update = { _id: comp._id, 'data.niveau_archetype': compValue }; - const updated = await this.updateEmbeddedEntity("OwnedItem", update); // Updates one EmbeddedEntity + const update = [ { _id: comp.id, 'data.niveau_archetype': compValue } ]; + await this.updateEmbeddedDocuments("Item", update); // Updates one EmbeddedEntity } else { console.log("Competence not found", compName); } @@ -891,7 +896,7 @@ export class RdDActor extends Actor { this.buildSubConteneurObjetList(itemId, list); //console.log("List to delete", list); for (let item of list) { - await this.deleteOwnedItem(item.id); + await this.deleteEmbeddedDocuments("Item", [item.id] ); } } @@ -910,7 +915,7 @@ export class RdDActor extends Actor { contenu.splice(index, 1); index = contenu.indexOf(itemId); } - await this.updateEmbeddedEntity("OwnedItem", data2use); + await this.updateEmbeddedDocuments("Item", data2use); } } @@ -923,7 +928,7 @@ export class RdDActor extends Actor { if (conteneur && conteneur.type == 'conteneur') { let data2use = duplicate(conteneur.data); data2use.data.contenu.push(itemId); - await this.updateEmbeddedEntity("OwnedItem", data2use); + await this.updateEmbeddedDocuments("Item", [data2use]); } } @@ -938,7 +943,7 @@ export class RdDActor extends Actor { } } if (conteneurFixedList.length > 0) - await this.updateOwnedItem(conteneurFixedList); + await this.updateEmbeddedDocuments('Item', conteneurFixedList); } /* -------------------------------------------- */ @@ -951,7 +956,7 @@ export class RdDActor extends Actor { let itemMap = {}; for (let item of itemsList) { let srcItem = sourceActor.data.items.find(subItem => subItem._id == item.id); - let newItem = await this.createOwnedItem(duplicate(srcItem)); + let newItem = await this.createEmbeddedDocuments("Item", [ duplicate(srcItem) ] ); console.log('New object', newItem, srcItem); itemMap[srcItem._id] = newItem._id; // Pour garder le lien ancien / nouveau } @@ -966,11 +971,11 @@ export class RdDActor extends Actor { console.log('New conteneur filling!', newConteneur, newItemId, item); let contenu = duplicate(newConteneur.data.contenu); contenu.push(newItemId); - await this.updateOwnedItem({ _id: newConteneurId, 'data.contenu': contenu }); + await this.updateEmbeddedDocuments( "Item", [{ _id: newConteneurId, 'data.contenu': contenu } ]); } } for (let item of itemsList) { - await sourceActor.deleteOwnedItem(item.id); + await sourceActor.deleteEmbeddedDocuments("Item", [ item.id] ); } } @@ -3131,7 +3136,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ _deleteStatusEffectsByIds(effectIds, options) { - this.deleteEmbeddedEntity('ActiveEffect', effectIds, options); + this.deleteEmbeddedDocuments('ActiveEffect', effectIds, options); this.applyActiveEffects(); } @@ -3146,7 +3151,7 @@ export class RdDActor extends Actor { this.deleteStatusEffectById(statusEffect.id, options); const effet = duplicate(statusEffect); effet["flags.core.statusId"] = effet.id; - await this.createEmbeddedEntity('ActiveEffect', effet, options); + await this.createEmbeddedDocuments('ActiveEffect', effet, options); this.applyActiveEffects(); } diff --git a/module/chat-utility.js b/module/chat-utility.js index d38514ca..ea6b4772 100644 --- a/module/chat-utility.js +++ b/module/chat-utility.js @@ -13,7 +13,7 @@ export class ChatUtility { /* -------------------------------------------- */ static onRemoveMessages(part, gmId) { - if (game.user._id == gmId) { + if (game.user.data._id == gmId) { const toDelete = game.messages.filter(it => it.data.content.includes(part)); toDelete.forEach(it => it.delete()); } @@ -22,10 +22,10 @@ export class ChatUtility { /* -------------------------------------------- */ static removeChatMessageContaining(part) { - const gmId = game.user.isGM ? game.user._id : game.users.entities.find(u => u.isGM)?.id; + const gmId = game.user.isGM ? game.user.data._id : game.users.entities.find(u => u.isGM)?.data.id; if (!gmId || game.user.isGM) { - ChatUtility.onRemoveMessages(part, game.user._id); + ChatUtility.onRemoveMessages(part, game.user.data._id); } else { game.socket.emit("system.foundryvtt-reve-de-dragon", { diff --git a/module/item-sheet.js b/module/item-sheet.js index f70e3483..093ce575 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -48,6 +48,7 @@ export class RdDItemSheet extends ItemSheet { /* -------------------------------------------- */ async getData() { let data = super.getData(); + data.categorieCompetences = RdDUtility.getCategorieCompetences(); if ( data.item.type == 'tache' || data.item.type == 'livre' || data.item.type == 'meditation' || data.item.type == 'oeuvre') { data.caracList = duplicate(game.system.model.Actor.personnage.carac); @@ -57,11 +58,11 @@ export class RdDItemSheet extends ItemSheet { data.competences = await RdDUtility.loadCompendium( 'foundryvtt-reve-de-dragon.competences', it => RdDItemCompetence.isCompetenceArme(it)); } if ( data.item.type == 'recettealchimique' ) { - RdDAlchimie.processManipulation(data.item, this.actor && this.actor._id ); + RdDAlchimie.processManipulation(data.item, this.actor && this.actor.id ); } if ( this.actor ) { data.isOwned = true; - data.actorId = this.actor._id; + data.actorId = this.actor.id; } data.bonusCaseList = RdDItemSort.getBonusCaseList(data, true); data.isGM = game.user.isGM; // Pour verrouiller certaines éditions @@ -129,7 +130,7 @@ export class RdDItemSheet extends ItemSheet { _updateObject(event, formData) { // Données de bonus de cases ? formData = RdDItemSort.buildBonusCaseStringFromFormData( formData ); - + //console.log("HERE", this, formData, this.object.data ); return this.object.update(formData); } } diff --git a/module/rdd-main.js b/module/rdd-main.js index 2b7d2e43..1c45db7a 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -133,7 +133,8 @@ Hooks.once("init", async function () { /* -------------------------------------------- */ // Define custom Entity classes - CONFIG.Actor.entityClass = RdDActor; + CONFIG.Actor.documentClass = RdDActor; + //CONFIG.Actor.entityClass = RdDActor; CONFIG.RDD = { resolutionTable: RdDResolutionTable.resolutionTable, carac_array: RdDUtility.getCaracArray(), @@ -150,7 +151,8 @@ Hooks.once("init", async function () { Actors.registerSheet("foundryvtt-reve-de-dragon", RdDActorEntiteSheet, { types: ["entite"], makeDefault: true }); Items.unregisterSheet("core", ItemSheet); Items.registerSheet("foundryvtt-reve-de-dragon", RdDItemSheet, { makeDefault: true }); - CONFIG.Combat.entityClass = RdDCombatManager; + //CONFIG.Combat.entityClass = RdDCombatManager; + CONFIG.Combat.documentClass = RdDCombatManager; // préparation des différents modules RdDCommands.init(); @@ -171,7 +173,7 @@ function messageDeBienvenue() { if (game.user.isGM) { ChatUtility.removeChatMessageContaining('
'); ChatMessage.create({ - user: game.user._id, + user: game.user.data._id, content: `
Bienvenue dans le Rêve des Dragons !
Vous trouverez quelques informations pour démarrer dans ce document : @Compendium[foundryvtt-reve-de-dragon.rappel-des-regles.7uGrUHGdPu0EmIu2]{Documentation MJ/Joueurs}
La commande /aide dans le chat permet de voir les commandes spécifiques à Rêve de Dragon.
diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 079fc277..11a83bf4 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -142,8 +142,8 @@ export class RdDRoll extends Dialog { // Update html, according to data if (rollData.competence) { // Set the default carac from the competence item - rollData.selectedCarac = rollData.carac[rollData.competence.data.defaut_carac]; - $("#carac").val(rollData.competence.data.defaut_carac); + rollData.selectedCarac = rollData.carac[rollData.competence.data.data.defaut_carac]; + $("#carac").val(rollData.competence.data.data.defaut_carac); } if (rollData.selectedSort) { $("#draconic").val(rollData.selectedSort.data.listIndex); // Uniquement a la selection du sort, pour permettre de changer @@ -296,10 +296,10 @@ export class RdDRoll extends Dialog { /* -------------------------------------------- */ _computeDiffCompetence(rollData) { if (rollData.competence) { - return Misc.toInt(rollData.competence.data.niveau); + return Misc.toInt(rollData.competence.data.data.niveau); } if (rollData.draconicList) { - return Misc.toInt(rollData.competence.data.niveau); + return Misc.toInt(rollData.competence.data.data.niveau); } return 0; } @@ -336,7 +336,7 @@ export class RdDRoll extends Dialog { return compName + " - " + rollData.selectedSort.name; } // If a weapon is there, add it in the title - const niveau = Misc.toSignedString(rollData.competence.data.niveau); + const niveau = Misc.toSignedString(rollData.competence.data.data.niveau); if (compName == carac) { // cas des créatures return carac + " " + niveau diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index cbc1aafe..2312b1d7 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -180,7 +180,7 @@ export class RdDTMRDialog extends Dialog { updateValuesDisplay() { let ptsreve = document.getElementById("tmr-pointsreve-value"); ptsreve.innerHTML = this.actor.data.data.reve.reve.value; - + console.log( this.actor.data.data ); let tmrpos = document.getElementById("tmr-pos"); let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord); tmrpos.innerHTML = this.actor.data.data.reve.tmrpos.coord + " (" + tmr.label + ")"; diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 482b829d..1cf0e2c9 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -607,11 +607,10 @@ export class RdDUtility { /* -------------------------------------------- */ static async loadCompendium(compendium, filter = item => true) { let compendiumItems = await RdDUtility.loadCompendiumNames(compendium); - const pack = game.packs.get(compendium); let list = []; - for (let compendiumItem of compendiumItems) { - await pack.getEntity(compendiumItem._id).then(it => { + for (let compendiumItem of compendiumItems) { + await pack.getDocument(compendiumItem._id).then(it => { const item = it.data; if (filter(item)) { list.push(item); diff --git a/module/rolldata-ajustements.js b/module/rolldata-ajustements.js index 049b0972..add62573 100644 --- a/module/rolldata-ajustements.js +++ b/module/rolldata-ajustements.js @@ -20,7 +20,7 @@ export const referenceAjustements = { competence: { isUsed: (rollData, actor) => rollData.competence, getLabel: (rollData, actor) => rollData.competence?.name, - getValue: (rollData, actor) => rollData.competence?.data?.niveau, + getValue: (rollData, actor) => rollData.competence?.data?.data.niveau, }, meditation: { isUsed: (rollData, actor) => rollData.meditation, diff --git a/system.json b/system.json index 70076bb4..db7d71f6 100644 --- a/system.json +++ b/system.json @@ -2,10 +2,10 @@ "name": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", "description": "Rêve de Dragon RPG for FoundryVTT", - "version": "1.3.25", + "version": "1.4.0", "manifestPlusVersion": "1.0.0", - "minimumCoreVersion": "0.7.5", - "compatibleCoreVersion": "0.7.9", + "minimumCoreVersion": "0.8.0", + "compatibleCoreVersion": "0.8.0", "templateVersion": 95, "author": "LeRatierBretonnien", "authors": [ diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index 80f64dea..2344b651 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -14,8 +14,8 @@ @@ -23,8 +23,8 @@ @@ -33,23 +33,23 @@ {{{data.fatigue.html}}} Fatigue - - - / {{data.sante.fatigue.max}} + + / {{data.data.sante.fatigue.max}} +
  • @@ -65,14 +65,14 @@ Regarder les Terres Médianes
    - Malus de fatigue : {{data.fatigue.malus}} + Malus de fatigue : {{data.data.fatigue.malus}} {{{data.fatigue.html}}} - {{data.blessures.resume}} + {{data.data.blessures.resume}}
    - {{data.compteurs.etat.label}}: {{data.compteurs.etat.value}} - {{data.compteurs.surenc.label}}: {{data.compteurs.surenc.value}} + {{data.data.compteurs.etat.label}}: {{data.data.compteurs.etat.value}} + {{data.data.compteurs.surenc.label}}: {{data.data.compteurs.surenc.value}}
    {{#if data.surprise}}{{data.surprise}}! {{/if}} @@ -116,7 +116,7 @@ src="systems/foundryvtt-reve-de-dragon/icons/{{#if data.editCaracComp}}unlocked.svg{{else}}locked.svg{{/if}}" alt="blocker/débloquer" >{{#if data.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}