// 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}.`);
})();