rigs specialabilities for import.

pull/61/head
macniel 2025-10-21 12:15:59 +02:00
parent 9f91606516
commit 7fe5ba1595
5 changed files with 98 additions and 39 deletions

View File

@ -5,7 +5,7 @@ import {getRandomValues} from 'node:crypto';
import * as dartSass from 'sass'; import * as dartSass from 'sass';
import gulpSass from 'gulp-sass'; import gulpSass from 'gulp-sass';
import {deleteAsync} from 'del'; import {deleteAsync} from 'del';
import {readdirSync, readFileSync, writeFileSync, rmdirSync, existsSync, mkdirSync} from "fs"; import {readdirSync, readFileSync, writeFileSync, rmdirSync, existsSync, mkdirSync, statSync} from "fs";
import {join} from 'node:path'; import {join} from 'node:path';
import {compilePack} from '@foundryvtt/foundryvtt-cli'; import {compilePack} from '@foundryvtt/foundryvtt-cli';
@ -30,21 +30,27 @@ function randomID(length = 16) {
return id; return id;
} }
const convert = function (from, to, ofType) { const convert = function (from, to, ofType, overwrite = true) {
const SOURCE = from; const SOURCE = from;
const DEST = to; const DEST = to;
const TYPE = ofType; const TYPE = ofType;
if (overwrite) {
try { try {
rmdirSync(DEST, {force: true, recursive: true}) rmdirSync(DEST, {force: true, recursive: true})
} catch (e) { } catch (e) {
} }
mkdirSync(DEST) mkdirSync(DEST)
}
readdirSync(SOURCE).forEach(file => { const filewalker = (source) => {
console.log(file) console.log("entering directory", source);
let originalSource = JSON.parse(readFileSync(join(SOURCE, file), {encoding: "utf8"})); readdirSync(source).forEach(file => {
if (statSync(join(source, file)).isDirectory()) {
filewalker(join(source, file));
} else {
let originalSource = JSON.parse(readFileSync(join(source, file), {encoding: "utf8"}));
let id = randomID(); let id = randomID();
let targetSource = { let targetSource = {
@ -59,7 +65,11 @@ const convert = function (from, to, ofType) {
let target = JSON.stringify(targetSource, null, 2); let target = JSON.stringify(targetSource, null, 2);
let newFileName = "./" + join(DEST, id + ".json"); let newFileName = "./" + join(DEST, id + ".json");
writeFileSync(newFileName, target, {encoding: "utf8"}); writeFileSync(newFileName, target, {encoding: "utf8"});
}
}); });
}
filewalker(SOURCE)
} }
@ -99,7 +109,8 @@ async function prepareDB() {
convert("./src/packs/_source/talente", "./src/packs/__source/talente", "Skill"); convert("./src/packs/_source/talente", "./src/packs/__source/talente", "Skill");
convert("./src/packs/_source/zauber", "./src/packs/__source/zauber", "Spell"); convert("./src/packs/_source/zauber", "./src/packs/__source/zauber", "Spell");
convert("./src/packs/_source/vorteile", "./src/packs/__source/vorteile", "Advantage"); convert("./src/packs/_source/vorteile", "./src/packs/__source/vorteile", "Advantage");
convert("./src/packs/_source/nachteile", "./src/packs/__source/vorteile", "Advantage"); convert("./src/packs/_source/nachteile", "./src/packs/__source/vorteile", "Advantage", false);
convert("./src/packs/_source/sonderfertigkeiten", "./src/packs/__source/sonderfertigkeiten", "SpecialAbility");
convert("./src/packs/_source/waffen", "./src/packs/__source/waffen", "Equipment"); convert("./src/packs/_source/waffen", "./src/packs/__source/waffen", "Equipment");
convert("./src/packs/_source/munition", "./src/packs/__source/munition", "Equipment"); convert("./src/packs/_source/munition", "./src/packs/__source/munition", "Equipment");
convert("./src/packs/_source/ruestzeug", "./src/packs/__source/ruestzeug", "Equipment"); convert("./src/packs/_source/ruestzeug", "./src/packs/__source/ruestzeug", "Equipment");

View File

@ -1,12 +1,28 @@
import BaseItem from "./base-item.mjs"; import BaseItem from "./base-item.mjs";
const {BooleanField, NumberField, SchemaField, ArrayField, StringField, HTMLField} = foundry.data.fields; const {
BooleanField,
NumberField,
SchemaField,
ArrayField,
StringField,
HTMLField,
ObjectField
} = foundry.data.fields;
export class SpecialAbilityDataModel extends BaseItem { export class SpecialAbilityDataModel extends BaseItem {
static defineSchema() { static defineSchema() {
return { return {
name: new StringField() name: new StringField(),
seite: new NumberField(),
aktionsText: new HTMLField(),
text: new HTMLField(),
requirements: new ObjectField(), // TODO something more meaningful with this data
waffenLimit: new ArrayField(
new StringField(),
),
mehrereAktionen: new BooleanField(),
} }
} }
} }

View File

@ -18,9 +18,9 @@ export class SpecialAbilitySheet extends HandlebarsApplicationMixin(DocumentShee
static TABS = { static TABS = {
sheet: { sheet: {
tabs: [ tabs: [
{id: 'json', group: 'sheet', label: 'JSON'}, {id: 'specialability', group: 'sheet', label: 'Sonderfertigkeit'},
], ],
initial: 'json' initial: 'specialability'
} }
} }
@ -29,8 +29,8 @@ export class SpecialAbilitySheet extends HandlebarsApplicationMixin(DocumentShee
form: { form: {
template: `systems/DSA_4-1/templates/item/specialability/main-sheet.hbs` template: `systems/DSA_4-1/templates/item/specialability/main-sheet.hbs`
}, },
json: { specialability: {
template: `systems/DSA_4-1/templates/item/specialability/tab-json.hbs` template: `systems/DSA_4-1/templates/item/specialability/tab-specialability.hbs`
}, },
} }
@ -55,7 +55,9 @@ export class SpecialAbilitySheet extends HandlebarsApplicationMixin(DocumentShee
context.system = specialabilityData.system; context.system = specialabilityData.system;
context.flags = specialabilityData.flags; context.flags = specialabilityData.flags;
context.json = JSON.stringify(specialabilityData); context.text = specialabilityData.system.text;
context.aktionsText = specialabilityData.system.aktionsText;
return context; return context;
} }

View File

@ -3,6 +3,7 @@ import {Blessing} from "../documents/blessing.mjs";
import {Profession} from "../documents/profession.mjs"; import {Profession} from "../documents/profession.mjs";
import {Culture} from "../documents/culture.mjs"; import {Culture} from "../documents/culture.mjs";
import {Species} from "../documents/species.mjs"; import {Species} from "../documents/species.mjs";
import {SpecialAbility} from "../documents/specialAbility.mjs";
export class XmlImport { export class XmlImport {
#months = [ #months = [
@ -273,7 +274,7 @@ export class XmlImport {
} }
} }
} }
json.sonderfertigkeiten = specialAbilities this.#mapSpecialAbilities(actor, specialAbilities)
json.liturgien = liturgies json.liturgien = liturgies
let combatValues = [] let combatValues = []
@ -510,6 +511,33 @@ export class XmlImport {
}) })
} }
async #mapSpecialAbilities(actor, specialAbilities) {
if (actor.itemTypes["SpecialAbility"].length > 0) {
actor.itemTypes["SpecialAbility"].forEach(s => {
actor.items.get(s._id).delete()
})
}
specialAbilities.forEach((specialAbility) => {
const compendiumOfSF = game.packs.get('DSA_4-1.sonderfertigkeiten');
const sfId = compendiumOfSF?.index.find(sf => sf.name === specialAbility.name)
if (sfId) {
compendiumOfSF.getDocument(sfId._id).then(sf => actor.createEmbeddedDocuments('Item', [sf]))
} else {
actor.createEmbeddedDocuments('Item', [
new SpecialAbility({
name: specialAbility.name,
type: "SpecialAbility",
system: {
description: specialAbility.auswahl?.wahl?.join("\n"),
}
})
])
}
})
}
async #mapSpezies(actor, spezies) { async #mapSpezies(actor, spezies) {
if (actor.itemTypes["Species"].length > 0) { if (actor.itemTypes["Species"].length > 0) {
actor.itemTypes["Species"].forEach(s => { actor.itemTypes["Species"].forEach(s => {

View File

@ -35,7 +35,7 @@
}, },
{ {
"name": "spells", "name": "spells",
"label": "Basiszauber", "label": "Zauber",
"system": "DSA_4-1", "system": "DSA_4-1",
"type": "Item", "type": "Item",
"path": "packs/zauber", "path": "packs/zauber",
@ -43,15 +43,17 @@
}, },
{ {
"name": "liturgien", "name": "liturgien",
"label": "Basisliturgien", "label": "Liturgien",
"system": "DSA_4-1", "system": "DSA_4-1",
"type": "Item" "type": "Item",
"path": "packs/liturgien"
}, },
{ {
"name": "sonderfertigkeiten", "name": "sonderfertigkeiten",
"label": "Basissonderfertigkeiten", "label": "Sonderfertigkeiten",
"system": "DSA_4-1", "system": "DSA_4-1",
"type": "Item" "type": "Item",
"path": "packs/sonderfertigkeiten"
}, },
{ {
"name": "Advantage", "name": "Advantage",