dsa-4th-edition/src/main.mjs
2024-10-05 22:44:10 +02:00

307 lines
17 KiB
JavaScript

Hooks.once("init", function() {
console.log("INIT");
CONFIG.Actor.dataModels.Player = DSA41_CharacterData;
CONFIG.Item. dataModels.Gegenstand = DSA41_GegenstandData;
CONFIG.Item. dataModels.Ruestung = DSA41_RuestungData;
CONFIG.Item. dataModels.Nahkampfwaffe = DSA41_NahkampfwaffeData;
//DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet);
DocumentSheetConfig.registerSheet(Actor, "dsa41", DSA41_ActorSheet, {
makeDefault: true,
types: [
"Player",
]
});
//DocumentSheetConfig.unregisterSheet(Item, "core", ItemSheet);
DocumentSheetConfig.registerSheet(Item, "dsa41", DSA41_ItemSheet, {
makeDefault: true,
types: [
"Gegenstand",
"Ruestung",
"Nahkampfwaffe",
]
});
});
const { SchemaField, NumberField, StringField, BooleanField } = foundry.data.fields;
class AttributeField extends foundry.data.fields.SchemaField {
constructor() {
return super({
initial: new NumberField({ integer: true, initial: 8, min: 8, max: 14, }),
advancement: new NumberField({ integer: true, initial: 0, min: 0, max: 4, }),
modifier: new NumberField({ integer: true, initial: 0, min: 0, }),
});
}
}
class CombatTalentField extends foundry.data.fields.SchemaField {
constructor() {
return super({
talentwert: new NumberField({ integer: true, initial: 0 }),
attacke: new NumberField({ integer: true, initial: 0 }),
parade: new NumberField({ integer: true, initial: 0 }),
});
}
}
class DSA41_CharacterData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
race: new StringField(),
culture: new StringField(),
profession: new StringField(),
attributes: new SchemaField({
courage: new AttributeField(),
cleverness: new AttributeField(),
intuition: new AttributeField(),
charisma: new AttributeField(),
dexterity: new AttributeField(),
agility: new AttributeField(),
constitution: new AttributeField(),
strength: new AttributeField(),
}),
kampf_talente: new SchemaField({
anderthalbhaender: new CombatTalentField(),
armbrust: new CombatTalentField(),
belagerungswaffen: new CombatTalentField(),
blasrohr: new CombatTalentField(),
bogen: new CombatTalentField(),
diskus: new CombatTalentField(),
dolche: new CombatTalentField(),
fechtwaffen: new CombatTalentField(),
hiebwaffen: new CombatTalentField(),
infanteriewaffen: new CombatTalentField(),
kettenstaebe: new CombatTalentField(),
kettenwaffen: new CombatTalentField(),
lanzenreiten: new CombatTalentField(),
peitsche: new CombatTalentField(),
raufen: new CombatTalentField(),
ringen: new CombatTalentField(),
saebel: new CombatTalentField(),
schleuder: new CombatTalentField(),
schwerter: new CombatTalentField(),
speere: new CombatTalentField(),
staebe: new CombatTalentField(),
wurfbeile: new CombatTalentField(),
wurfmesser: new CombatTalentField(),
wurfspeere: new CombatTalentField(),
zweihandflegel: new CombatTalentField(),
zweihand_hiebwaffen: new CombatTalentField(),
zweihandschwerter: new CombatTalentField(),
}),
talente: new SchemaField({
koerperliche: new SchemaField({
akrobatik: new NumberField({ integer: true, initial: 0 }),
athletik: new NumberField({ integer: true, initial: 0 }),
fliegen: new NumberField({ integer: true, initial: 0 }),
gaukeleien: new NumberField({ integer: true, initial: 0 }),
klettern: new NumberField({ integer: true, initial: 0 }),
koerperbeherrschung: new NumberField({ integer: true, initial: 0 }),
reiten: new NumberField({ integer: true, initial: 0 }),
schleichen: new NumberField({ integer: true, initial: 0 }),
schwimmen: new NumberField({ integer: true, initial: 0 }),
selbstbeherrschung: new NumberField({ integer: true, initial: 0 }),
sich_verstecken: new NumberField({ integer: true, initial: 0 }),
singen: new NumberField({ integer: true, initial: 0 }),
sinnenschärfe: new NumberField({ integer: true, initial: 0 }),
skifahren: new NumberField({ integer: true, initial: 0 }),
stimmen_imitieren: new NumberField({ integer: true, initial: 0 }),
tanzen: new NumberField({ integer: true, initial: 0 }),
taschendiebstahl: new NumberField({ integer: true, initial: 0 }),
zechen: new NumberField({ integer: true, initial: 0 }),
}),
gesellschaftliche: new SchemaField({
betoeren: new NumberField({ integer: true, initial: 0 }),
etikette: new NumberField({ integer: true, initial: 0 }),
gassenwissen: new NumberField({ integer: true, initial: 0 }),
lehren: new NumberField({ integer: true, initial: 0 }),
menschenkenntnis: new NumberField({ integer: true, initial: 0 }),
schauspielerei: new NumberField({ integer: true, initial: 0 }),
schriftlicher_ausdruck: new NumberField({ integer: true, initial: 0 }),
sich_verkleiden: new NumberField({ integer: true, initial: 0 }),
ueberreden: new NumberField({ integer: true, initial: 0 }),
ueberzeugen: new NumberField({ integer: true, initial: 0 }),
}),
natur: new SchemaField({
faehrtensuchen: new NumberField({ integer: true, initial: 0 }),
fallenstellen: new NumberField({ integer: true, initial: 0 }),
fesseln: new NumberField({ integer: true, initial: 0 }),
fischen: new NumberField({ integer: true, initial: 0 }),
orientierung: new NumberField({ integer: true, initial: 0 }),
wettervorhersage: new NumberField({ integer: true, initial: 0 }),
wildnisleben: new NumberField({ integer: true, initial: 0 }),
}),
wissens: new SchemaField({
anatomie: new NumberField({ integer: true, initial: 0 }),
baukunst: new NumberField({ integer: true, initial: 0 }),
brett_kartenspiel: new NumberField({ integer: true, initial: 0 }),
geographie: new NumberField({ integer: true, initial: 0 }),
geschichtswissen: new NumberField({ integer: true, initial: 0 }),
gesteinskunde: new NumberField({ integer: true, initial: 0 }),
goetter_kulte: new NumberField({ integer: true, initial: 0 }),
heraldik: new NumberField({ integer: true, initial: 0 }),
huettenkunde: new NumberField({ integer: true, initial: 0 }),
kriegskunst: new NumberField({ integer: true, initial: 0 }),
kryptographie: new NumberField({ integer: true, initial: 0 }),
magiekunde: new NumberField({ integer: true, initial: 0 }),
mechanik: new NumberField({ integer: true, initial: 0 }),
pflanzenkunde: new NumberField({ integer: true, initial: 0 }),
philosophie: new NumberField({ integer: true, initial: 0 }),
rechnen: new NumberField({ integer: true, initial: 0 }),
rechtskunde: new NumberField({ integer: true, initial: 0 }),
sagen_legenden: new NumberField({ integer: true, initial: 0 }),
schaetzen: new NumberField({ integer: true, initial: 0 }),
sprachenkunde: new NumberField({ integer: true, initial: 0 }),
staatskunst: new NumberField({ integer: true, initial: 0 }),
sternkunde: new NumberField({ integer: true, initial: 0 }),
tierkunde: new NumberField({ integer: true, initial: 0 }),
}),
sprachen: new SchemaField({
lesen_schreiben: new NumberField({ integer: true, initial: 0 }),
muttersprache: new NumberField({ integer: true, initial: 0 }),
fremdsprache: new NumberField({ integer: true, initial: 0 }),
}),
handwerks: new SchemaField({
abrichten: new NumberField({ integer: true, initial: 0 }),
ackerbau: new NumberField({ integer: true, initial: 0 }),
alchimie: new NumberField({ integer: true, initial: 0 }),
bergbau: new NumberField({ integer: true, initial: 0 }),
bogenbau: new NumberField({ integer: true, initial: 0 }),
boote_fahren: new NumberField({ integer: true, initial: 0 }),
brauer: new NumberField({ integer: true, initial: 0 }),
drucker: new NumberField({ integer: true, initial: 0 }),
fahrzeug_lenken: new NumberField({ integer: true, initial: 0 }),
falschspiel: new NumberField({ integer: true, initial: 0 }),
feinmechanik: new NumberField({ integer: true, initial: 0 }),
feuersteinbearbeitung: new NumberField({ integer: true, initial: 0 }),
fleischer: new NumberField({ integer: true, initial: 0 }),
gerber: new NumberField({ integer: true, initial: 0 }),
glaskunst: new NumberField({ integer: true, initial: 0 }),
grobschmied: new NumberField({ integer: true, initial: 0 }),
handel: new NumberField({ integer: true, initial: 0 }),
hauswirtschaft: new NumberField({ integer: true, initial: 0 }),
heilkunde_gift: new NumberField({ integer: true, initial: 0 }),
heilkunde_krankheiten: new NumberField({ integer: true, initial: 0 }),
heilkunde_seele: new NumberField({ integer: true, initial: 0 }),
heilkunde_wunden: new NumberField({ integer: true, initial: 0 }),
holzbearbeitung: new NumberField({ integer: true, initial: 0 }),
instrumentenbauer: new NumberField({ integer: true, initial: 0 }),
kartographie: new NumberField({ integer: true, initial: 0 }),
kochen: new NumberField({ integer: true, initial: 0 }),
kristallzucht: new NumberField({ integer: true, initial: 0 }),
lederarbeiten: new NumberField({ integer: true, initial: 0 }),
malen_zeichnen: new NumberField({ integer: true, initial: 0 }),
maurer: new NumberField({ integer: true, initial: 0 }),
metallguss: new NumberField({ integer: true, initial: 0 }),
musizieren: new NumberField({ integer: true, initial: 0 }),
schloesser_knacken: new NumberField({ integer: true, initial: 0 }),
schnapps_brennen: new NumberField({ integer: true, initial: 0 }),
schneidern: new NumberField({ integer: true, initial: 0 }),
seefahrt: new NumberField({ integer: true, initial: 0 }),
seiler: new NumberField({ integer: true, initial: 0 }),
steinmetz: new NumberField({ integer: true, initial: 0 }),
juwelier: new NumberField({ integer: true, initial: 0 }),
stellmacher: new NumberField({ integer: true, initial: 0 }),
stoffe_faerben: new NumberField({ integer: true, initial: 0 }),
taetowieren: new NumberField({ integer: true, initial: 0 }),
toepfern: new NumberField({ integer: true, initial: 0 }),
viehzucht: new NumberField({ integer: true, initial: 0 }),
webkunst: new NumberField({ integer: true, initial: 0 }),
winzer: new NumberField({ integer: true, initial: 0 }),
zimmermann: new NumberField({ integer: true, initial: 0 }),
}),
}),
}
}
prepareDerivedData() {
super.prepareDerivedData();
this.computed = {};
for (const [attribute, values] of Object.entries(this.attributes)) {
this.computed[attribute] = Object.values(values).reduce((a, b) => a + b, 0);
}
}
}
class DSA41_GegenstandData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
gewicht: new NumberField({ integer: false, initial: 0, min: 0 }),
preis: new NumberField({ integer: true, initial: 0, min: 0 }),
};
}
}
class DSA41_RuestungData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
gewicht: new NumberField({ integer: false, initial: 0, min: 0 }),
preis: new NumberField({ integer: true, initial: 0, min: 0 }),
kopf: new NumberField({ integer: true, initial: 0, min: 0 }),
brust: new NumberField({ integer: true, initial: 0, min: 0 }),
ruecken: new NumberField({ integer: true, initial: 0, min: 0 }),
bauch: new NumberField({ integer: true, initial: 0, min: 0 }),
linker_arm: new NumberField({ integer: true, initial: 0, min: 0 }),
rechter_arm: new NumberField({ integer: true, initial: 0, min: 0 }),
linkes_bein: new NumberField({ integer: true, initial: 0, min: 0 }),
rechtes_bein: new NumberField({ integer: true, initial: 0, min: 0 }),
gesamt_ruestungsschutz: new NumberField({ integer: false, initial: 0, min: 0 }),
gesamt_behinderung: new NumberField({ integer: false, initial: 0, min: 0 }),
};
}
}
class DSA41_NahkampfwaffeData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
gewicht: new NumberField({ integer: false, initial: 0, min: 0 }),
preis: new NumberField({ integer: true, initial: 0, min: 0 }),
laenge: new NumberField({ integer: true, initial: 0, min: 0 }),
basis: new StringField(),
schwellenwert: new NumberField({ integer: true, initial: 0, min: 0 }),
schadensschritte: new NumberField({ integer: true, initial: 0, min: 0 }),
modifikator_attacke: new NumberField({ integer: true, initial: 0 }),
modifikator_parade: new NumberField({ integer: true, initial: 0 }),
initiative: new NumberField({ integer: true, initial: 0 }),
bruchfaktor: new NumberField({ integer: true, initial: 0 }),
distanzklasse: new StringField(),
kampftalente: new StringField(),
zweihaendig: new BooleanField(),
werfbar: new BooleanField(),
improvisiert: new BooleanField(),
priviligiert: new BooleanField(),
};
}
}
class DSA41_ActorSheet extends ActorSheet {
get template() {
return "systems/dsa-4th-edition/src/ActorSheet.html";
}
}
class DSA41_ItemSheet extends ItemSheet {
get template() {
return "systems/dsa-4th-edition/src/ItemSheets/" + this.item.type + ".html";
}
}