// GK – Import World Items (from JSONs into Items Directory) — FIXED path handling (async () => { const FILES = [ "fvtt-Item-archetype-grey-knight_v5.json", "fvtt-Item-ability-aegis-of-titan_v5.json", "fvtt-Item-nemesis-force-halberd_v4.json", "fvtt-Item-gk-armour-integrated-storm-bolter_v2.json", "fvtt-Item-aegis-power-armour_v2.json", "fvtt-Item-terminator-aegis-gk_v4.json" ]; const worldId = game.world?.id || game.world?.name || game.data?.world?.id || game.data?.world?.name; const defaultDir = `worlds/${worldId}/foundry`; const pick = await new Promise(resolve => { const content = `

Folder z JSON-ami (domyślnie: ${defaultDir})

`; const dlg = new Dialog({ title: "GK – Import World Items (Fixed)", content, buttons: { go: { label: "Importuj", icon: '', callback: html => resolve({ok:true, html}) }, cancel: { label: "Anuluj", callback: () => resolve({ok:false}) } }, render: html => { html.find("button.browse").on("click", () => { const fp = new FilePicker({ type: "any", callback: path => { const folder = (path || "").replace(/[/\\][^/\\]*$/, ""); html.find('input[name="path"]').val(folder || defaultDir); } }); fp.browse("data", defaultDir); }); }, default: "go" }); dlg.render(true); }); if (!pick?.ok) return; const dir = pick.html.find('input[name="path"]').val()?.trim() || defaultDir; const overwrite = pick.html.find('input[name="overwrite"]')[0]?.checked; const ensureFolder = async (name, color="#4b6eaf") => { let f = game.folders.find(x => x.type === "Item" && x.name === name); if (!f) f = await Folder.create({name, type:"Item", color}); return f; }; const worldFolder = await ensureFolder("Grey Knight Pack", "#4b6eaf"); const fetchJSON = async (path) => { const res = await fetch(`/${path}`); if (!res.ok) throw new Error(`Nie mogę pobrać: ${path} (HTTP ${res.status})`); return await res.json(); }; let created = 0, updated = 0, skipped = 0; for (const fn of FILES) { try { const full = `${dir}/${fn}`; const data = await fetchJSON(full); if (data._id) delete data._id; data.folder = worldFolder.id; const existing = game.items.getName(data.name); if (existing) { if (overwrite) { await existing.update(data); updated++; } else { skipped++; } } else { await Item.create(data); created++; } } catch (e) { console.error(`Błąd importu ${fn}`, e); ui.notifications.warn(`Błąd importu: ${fn} (konsola).`); } } ui.notifications.info(`GK Import: utworzono ${created}, zaktualizowano ${updated}, pominięto ${skipped}.`); })();