Ame/Ame max
This commit is contained in:
116
modules/macro-replace-images.js
Normal file
116
modules/macro-replace-images.js
Normal file
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* 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: `<p>Cette macro va :</p>
|
||||
<ul>
|
||||
<li>Déverrouiller tous les compendiums</li>
|
||||
<li>Remplacer "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd2" dans tous les champs 'img'</li>
|
||||
<li>Reverrouiller les compendiums</li>
|
||||
</ul>
|
||||
<p><strong>Voulez-vous continuer ?</strong></p>`,
|
||||
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}`);
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user