feat: tarot deck auto-import depuis compendium/data JSON
resetDeck() cherche les cartes dans cet ordre : 1. game.items (items monde existants) 2. Compendium système fvtt-hamalron.hamalron-items 3. assets/data/tarot.json (création automatique) Ajout de assets/data/tarot.json : 78 cartes standard
This commit is contained in:
@@ -0,0 +1,548 @@
|
||||
[
|
||||
{
|
||||
"name": "Le Bateleur",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "1",
|
||||
"description": "<p>Le Bateleur</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Papesse",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "2",
|
||||
"description": "<p>La Papesse</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Impératrice",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "3",
|
||||
"description": "<p>L'Impératrice</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Empereur",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "4",
|
||||
"description": "<p>L'Empereur</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Pape",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "5",
|
||||
"description": "<p>Le Pape</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Amoureux",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "6",
|
||||
"description": "<p>L'Amoureux</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Chariot",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "7",
|
||||
"description": "<p>Le Chariot</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Justice",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "8",
|
||||
"description": "<p>La Justice</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Hermite",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "9",
|
||||
"description": "<p>L'Hermite</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Roue de Fortune",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "10",
|
||||
"description": "<p>La Roue de Fortune</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Force",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "11",
|
||||
"description": "<p>La Force</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Pendu",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "12",
|
||||
"description": "<p>Le Pendu</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Arcane sans Nom",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "13",
|
||||
"description": "<p>L'Arcane sans Nom</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Tempérance",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "14",
|
||||
"description": "<p>La Tempérance</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Diable",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "15",
|
||||
"description": "<p>Le Diable</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Maison Dieu",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "16",
|
||||
"description": "<p>La Maison Dieu</p>"
|
||||
},
|
||||
{
|
||||
"name": "L'Étoile",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "17",
|
||||
"description": "<p>L'Étoile</p>"
|
||||
},
|
||||
{
|
||||
"name": "La Lune",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "18",
|
||||
"description": "<p>La Lune</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Soleil",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "19",
|
||||
"description": "<p>Le Soleil</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Jugement",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "20",
|
||||
"description": "<p>Le Jugement</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Monde",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "21",
|
||||
"description": "<p>Le Monde</p>"
|
||||
},
|
||||
{
|
||||
"name": "Le Mat",
|
||||
"type": "atout",
|
||||
"symbole": "coupe",
|
||||
"valeur": "lemat",
|
||||
"description": "<p>Le Mat</p>"
|
||||
},
|
||||
{
|
||||
"name": "As de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "1",
|
||||
"description": "<p>As de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "2 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "2",
|
||||
"description": "<p>2 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "3 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "3",
|
||||
"description": "<p>3 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "4 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "4",
|
||||
"description": "<p>4 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "5 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "5",
|
||||
"description": "<p>5 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "6 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "6",
|
||||
"description": "<p>6 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "7 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "7",
|
||||
"description": "<p>7 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "8 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "8",
|
||||
"description": "<p>8 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "9 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "9",
|
||||
"description": "<p>9 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "10 de Bâton",
|
||||
"type": "numéro",
|
||||
"symbole": "baton",
|
||||
"valeur": "10",
|
||||
"description": "<p>10 de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "As de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "1",
|
||||
"description": "<p>As de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "2 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "2",
|
||||
"description": "<p>2 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "3 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "3",
|
||||
"description": "<p>3 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "4 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "4",
|
||||
"description": "<p>4 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "5 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "5",
|
||||
"description": "<p>5 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "6 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "6",
|
||||
"description": "<p>6 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "7 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "7",
|
||||
"description": "<p>7 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "8 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "8",
|
||||
"description": "<p>8 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "9 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "9",
|
||||
"description": "<p>9 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "10 de Coupe",
|
||||
"type": "numéro",
|
||||
"symbole": "coupe",
|
||||
"valeur": "10",
|
||||
"description": "<p>10 de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "As de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "1",
|
||||
"description": "<p>As de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "2 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "2",
|
||||
"description": "<p>2 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "3 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "3",
|
||||
"description": "<p>3 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "4 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "4",
|
||||
"description": "<p>4 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "5 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "5",
|
||||
"description": "<p>5 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "6 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "6",
|
||||
"description": "<p>6 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "7 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "7",
|
||||
"description": "<p>7 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "8 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "8",
|
||||
"description": "<p>8 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "9 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "9",
|
||||
"description": "<p>9 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "10 de Denier",
|
||||
"type": "numéro",
|
||||
"symbole": "denier",
|
||||
"valeur": "10",
|
||||
"description": "<p>10 de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "As d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "1",
|
||||
"description": "<p>As d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "2 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "2",
|
||||
"description": "<p>2 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "3 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "3",
|
||||
"description": "<p>3 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "4 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "4",
|
||||
"description": "<p>4 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "5 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "5",
|
||||
"description": "<p>5 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "6 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "6",
|
||||
"description": "<p>6 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "7 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "7",
|
||||
"description": "<p>7 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "8 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "8",
|
||||
"description": "<p>8 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "9 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "9",
|
||||
"description": "<p>9 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "10 d'Épée",
|
||||
"type": "numéro",
|
||||
"symbole": "epee",
|
||||
"valeur": "10",
|
||||
"description": "<p>10 d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "Valet de Bâton",
|
||||
"type": "figure",
|
||||
"symbole": "baton",
|
||||
"valeur": "valet",
|
||||
"description": "<p>Valet de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "Cavalier de Bâton",
|
||||
"type": "figure",
|
||||
"symbole": "baton",
|
||||
"valeur": "cavalier",
|
||||
"description": "<p>Cavalier de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "Reine de Bâton",
|
||||
"type": "figure",
|
||||
"symbole": "baton",
|
||||
"valeur": "reine",
|
||||
"description": "<p>Reine de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "Roi de Bâton",
|
||||
"type": "figure",
|
||||
"symbole": "baton",
|
||||
"valeur": "roi",
|
||||
"description": "<p>Roi de Bâton</p>"
|
||||
},
|
||||
{
|
||||
"name": "Valet de Coupe",
|
||||
"type": "figure",
|
||||
"symbole": "coupe",
|
||||
"valeur": "valet",
|
||||
"description": "<p>Valet de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "Cavalier de Coupe",
|
||||
"type": "figure",
|
||||
"symbole": "coupe",
|
||||
"valeur": "cavalier",
|
||||
"description": "<p>Cavalier de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "Reine de Coupe",
|
||||
"type": "figure",
|
||||
"symbole": "coupe",
|
||||
"valeur": "reine",
|
||||
"description": "<p>Reine de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "Roi de Coupe",
|
||||
"type": "figure",
|
||||
"symbole": "coupe",
|
||||
"valeur": "roi",
|
||||
"description": "<p>Roi de Coupe</p>"
|
||||
},
|
||||
{
|
||||
"name": "Valet de Denier",
|
||||
"type": "figure",
|
||||
"symbole": "denier",
|
||||
"valeur": "valet",
|
||||
"description": "<p>Valet de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "Cavalier de Denier",
|
||||
"type": "figure",
|
||||
"symbole": "denier",
|
||||
"valeur": "cavalier",
|
||||
"description": "<p>Cavalier de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "Reine de Denier",
|
||||
"type": "figure",
|
||||
"symbole": "denier",
|
||||
"valeur": "reine",
|
||||
"description": "<p>Reine de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "Roi de Denier",
|
||||
"type": "figure",
|
||||
"symbole": "denier",
|
||||
"valeur": "roi",
|
||||
"description": "<p>Roi de Denier</p>"
|
||||
},
|
||||
{
|
||||
"name": "Valet d'Épée",
|
||||
"type": "figure",
|
||||
"symbole": "epee",
|
||||
"valeur": "valet",
|
||||
"description": "<p>Valet d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "Cavalier d'Épée",
|
||||
"type": "figure",
|
||||
"symbole": "epee",
|
||||
"valeur": "cavalier",
|
||||
"description": "<p>Cavalier d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "Reine d'Épée",
|
||||
"type": "figure",
|
||||
"symbole": "epee",
|
||||
"valeur": "reine",
|
||||
"description": "<p>Reine d'Épée</p>"
|
||||
},
|
||||
{
|
||||
"name": "Roi d'Épée",
|
||||
"type": "figure",
|
||||
"symbole": "epee",
|
||||
"valeur": "roi",
|
||||
"description": "<p>Roi d'Épée</p>"
|
||||
}
|
||||
]
|
||||
@@ -5,7 +5,7 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin
|
||||
super(options)
|
||||
this.deck = []
|
||||
this.discard = []
|
||||
this.loadDeckState()
|
||||
this.loadDeckState().catch(e => console.warn("Deck init error:", e))
|
||||
}
|
||||
|
||||
/** @override */
|
||||
@@ -58,46 +58,81 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin
|
||||
/**
|
||||
* Load the deck state from settings
|
||||
*/
|
||||
loadDeckState() {
|
||||
async loadDeckState() {
|
||||
const state = game.settings.get("fvtt-hamalron", "tarotDeckState")
|
||||
if (state && state.deck && state.deck.length > 0) {
|
||||
this.deck = state.deck
|
||||
this.discard = state.discard || []
|
||||
console.log("Deck state loaded:", state)
|
||||
} else {
|
||||
// Si aucun état sauvegardé, initialiser un nouveau deck
|
||||
this.resetDeck()
|
||||
await this.resetDeck()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the deck to a full tarot deck
|
||||
*/
|
||||
resetDeck() {
|
||||
async resetDeck() {
|
||||
this.deck = []
|
||||
this.discard = []
|
||||
|
||||
// Créer toutes les cartes du jeu de tarot
|
||||
const items = game.items.filter(i => i.type === "tarot")
|
||||
let items = game.items.filter(i => i.type === "tarot")
|
||||
|
||||
if (items.length > 0) {
|
||||
// Utiliser les items existants
|
||||
this.deck = items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
img: item.img,
|
||||
symbole: item.system.symbole,
|
||||
valeur: item.system.valeur,
|
||||
type: item.system.type,
|
||||
description: item.system.description,
|
||||
}))
|
||||
} else {
|
||||
ui.notifications.warn("HAMALRON.TarotDeck.NoCardsFound", { localize: true })
|
||||
// Si aucune carte dans le monde, importer depuis le compendium système
|
||||
if (items.length === 0) {
|
||||
const pack = game.packs.get("fvtt-hamalron.hamalron-items")
|
||||
if (pack) {
|
||||
const docs = await pack.getDocuments()
|
||||
const tarotDocs = docs.filter(d => d.type === "tarot")
|
||||
if (tarotDocs.length > 0) {
|
||||
for (const doc of tarotDocs) {
|
||||
const imported = await Item.create(doc.toObject(), { temporary: false })
|
||||
if (imported) items.push(imported)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dernier recours : créer les cartes depuis les données JSON
|
||||
if (items.length === 0) {
|
||||
try {
|
||||
const resp = await fetch("systems/fvtt-hamalron/assets/data/tarot.json")
|
||||
const data = await resp.json()
|
||||
if (Array.isArray(data) && data.length > 0) {
|
||||
for (const card of data) {
|
||||
const created = await Item.create({
|
||||
name: card.name,
|
||||
type: "tarot",
|
||||
img: "icons/svg/treasure.svg",
|
||||
system: {
|
||||
type: card.type,
|
||||
symbole: card.symbole,
|
||||
valeur: card.valeur,
|
||||
description: card.description || `<p>${card.name}</p>`,
|
||||
image: "icons/svg/treasure.svg",
|
||||
},
|
||||
})
|
||||
if (created) items.push(created)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("Hamalron | Failed to load tarot.json:", e)
|
||||
}
|
||||
}
|
||||
|
||||
// Construire le deck
|
||||
this.deck = items.map(item => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
img: item.img,
|
||||
symbole: item.system.symbole,
|
||||
valeur: item.system.valeur,
|
||||
type: item.system.type,
|
||||
description: item.system.description,
|
||||
}))
|
||||
|
||||
// Mélanger le deck
|
||||
this.shuffleDeck()
|
||||
this.saveDeckState()
|
||||
await this.saveDeckState()
|
||||
this.render()
|
||||
}
|
||||
|
||||
@@ -186,7 +221,7 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin
|
||||
})
|
||||
|
||||
if (confirmed) {
|
||||
this.resetDeck()
|
||||
await this.resetDeck()
|
||||
ui.notifications.info("HAMALRON.TarotDeck.DeckReset", { localize: true })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user