/** * Macro pour remplacer les chemins d'images dans les compendiums * Remplace "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd2" dans tous les champs 'img' */ (async () => { // Confirmation avant de procéder let confirm = await Dialog.confirm({ title: "Remplacement des chemins d'images", content: `
Cette macro va :
Voulez-vous continuer ?
`, defaultYes: false }); if (!confirm) { ui.notifications.info("Opération annulée"); return; } ui.notifications.info("Début du traitement des compendiums..."); let totalUpdated = 0; let compendiumsProcessed = 0; // Parcourir tous les compendiums for (let pack of game.packs) { // Filtrer uniquement les compendiums du système mournblade if (!pack.metadata.packageName.includes("mournblade")) continue; console.log(`Traitement du compendium: ${pack.metadata.label}`); compendiumsProcessed++; try { // Unlock le compendium await pack.configure({ locked: false }); // Récupérer tous les documents du compendium let documents = await pack.getDocuments(); let updatedInPack = 0; for (let doc of documents) { let needsUpdate = false; let updateData = {}; // Vérifier le champ img principal if (doc.img && doc.img.includes("fvtt-hawkmoon-cyd")) { updateData.img = doc.img.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2"); needsUpdate = true; } // Pour les acteurs, vérifier aussi prototypeToken.texture.src if (doc.documentName === "Actor" && doc.prototypeToken?.texture?.src) { if (doc.prototypeToken.texture.src.includes("fvtt-hawkmoon-cyd")) { updateData["prototypeToken.texture.src"] = doc.prototypeToken.texture.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2"); needsUpdate = true; } } // Pour les items contenus dans les acteurs if (doc.documentName === "Actor" && doc.items) { for (let item of doc.items) { if (item.img && item.img.includes("fvtt-hawkmoon-cyd")) { // Note: Les items embarqués nécessitent une approche différente needsUpdate = true; } } } // Pour les scènes, vérifier background.src et les tokens if (doc.documentName === "Scene") { if (doc.background?.src && doc.background.src.includes("fvtt-hawkmoon-cyd")) { updateData["background.src"] = doc.background.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2"); needsUpdate = true; } } // Effectuer la mise à jour si nécessaire if (needsUpdate) { await doc.update(updateData); updatedInPack++; console.log(` - Mise à jour: ${doc.name}`); } } // Lock le compendium await pack.configure({ locked: true }); if (updatedInPack > 0) { ui.notifications.info(`${pack.metadata.label}: ${updatedInPack} document(s) mis à jour`); totalUpdated += updatedInPack; } } catch (error) { console.error(`Erreur lors du traitement de ${pack.metadata.label}:`, error); ui.notifications.error(`Erreur sur ${pack.metadata.label}: ${error.message}`); // Tenter de reverrouiller en cas d'erreur try { await pack.configure({ locked: true }); } catch (lockError) { console.error(`Impossible de reverrouiller ${pack.metadata.label}:`, lockError); } } } ui.notifications.info(`Traitement terminé ! ${totalUpdated} document(s) mis à jour dans ${compendiumsProcessed} compendium(s).`); console.log(`=== Résumé ===`); console.log(`Compendiums traités: ${compendiumsProcessed}`); console.log(`Total de documents mis à jour: ${totalUpdated}`); })();