imports combatstatistics

pull/58/head
macniel 2025-10-13 23:45:01 +02:00
parent 4388cc8f60
commit 8b0e11f071
3 changed files with 38 additions and 11 deletions

View File

@ -10,7 +10,7 @@ export class SkillDataModel extends BaseItem {
gruppe: new StringField({required: true}),
taw: new NumberField({integer: true, initial: 0}),
at: new NumberField({required: false, integer: true, initial: 0}),
pa: new NumberField({required: false, integer: true, initial: 0}),
pa: new NumberField({required: false, integer: true, nullable: true, initial: 0}),
probe: new ArrayField(new StringField(), {exact: 3}), // References one of the eight attributes by name
voraussetzung: new SchemaField({
talent: new StringField({model: SkillDataModel}),

View File

@ -94,10 +94,22 @@ export class CharacterSheet extends ActorSheet {
eigenschaft2: werte[1].name,
eigenschaft3: werte[2].name,
probe: `(${eigenschaften.join("/")})`,
id: item._id,
at: item.system.at,
pa: item.system.pa,
id: item._id,
komplexität: item.system.komplexität
};
if (talentGruppe === "Kampf") {
if (item.system.pa != null) { // has no parry value so it must be ranged talent (TODO: but it isnt as there can be combatstatistics which has no pa value assigned to)
obj.at = item.system.at + context.derived.at.aktuell
obj.pa = item.system.pa + context.derived.pa.aktuell
} else {
obj.at = item.system.at + context.derived.fk.aktuell
}
}
context.skills[talentGruppe].push(obj);
context.flatSkills.push(obj);
}
@ -379,7 +391,6 @@ export class CharacterSheet extends ActorSheet {
const fkitems = fernkampf.system.rangedSkills.map(async (skillInQuestion) => await this.object.items.getName(skillInQuestion))
fkitems.forEach(async skill => {
const obj = await skill
console.log(this.object.system.fk, obj.system.at);
context.attacks.push({
name: obj.name,
using: fernkampf.name,

View File

@ -74,7 +74,7 @@ function getJsonFromXML(dom) {
return jsonResult;
}
async function addSkillFromCompendiumByNameToActor(talentName, taw, actor) {
async function addSkillFromCompendiumByNameToActor(talentName, taw, actor, combatStatistics, attributes) {
const compendiumOfSkills = game.packs.get('DSA_4-1.talente');
const talentId = compendiumOfSkills.index.find(skill => skill.name === talentName)
if (talentId) {
@ -83,7 +83,21 @@ async function addSkillFromCompendiumByNameToActor(talentName, taw, actor) {
try {
const embeddedDocument = (await actor.createEmbeddedDocuments('Item', [talent]))[0]
embeddedDocument.update({system: {taw: taw}});
if (talent.system.gruppe === "Kampf") {
const atbasis = attributes.find(p => p.name === "at").value
const pabasis = attributes.find(p => p.name === "pa").value
const combatStatistic = combatStatistics.find(p => p.name === talent.name)
if (combatStatistic) { // melee with AT/PA values
let at = combatStatistic.at - atbasis ?? 0
let pa = combatStatistic.pa - pabasis ?? 0
console.log({system: {taw, at, pa}})
embeddedDocument.update({system: {taw, at, pa}});
} else { // ranged with only AT values which is equal to taw
embeddedDocument.update({system: {taw: taw, at: taw, pa: null}}); // at is already at raw taw and wasn't influenced by helden-software precalculations
}
} else {
embeddedDocument.update({system: {taw: taw, at: null, pa: null}}); // just regular talent with taw
}
} catch (error) {
console.error(`${talentName} not found in items`, error)
}
@ -171,7 +185,7 @@ function calculateBirthdate(json) {
return `${day}. ${month} ${year} BF`
}
function mapSkills(actor, held) {
function mapSkills(actor, held, kampfwerte) {
for (let talent in held.talentliste.talent) {
talent = held.talentliste.talent[talent]
@ -191,7 +205,8 @@ function mapSkills(actor, held) {
} else {
// proceed
addSkillFromCompendiumByNameToActor(talent.name, talent.value, actor)
const eigenschaften = held.eigenschaften.eigenschaft
addSkillFromCompendiumByNameToActor(talent.name, talent.value, actor, kampfwerte, eigenschaften)
}
}
}
@ -333,10 +348,6 @@ function mapRawJson(actor, rawJson) {
json.sonderfertigkeiten = specialAbilities
json.liturgien = liturgies
mapSkills(actor, held)
mapSpells(actor, held)
mapMiracles(actor, liturgies)
let combatValues = []
for (let combatValue in held.kampf.kampfwerte) {
combatValue = held.kampf.kampfwerte[combatValue]
@ -347,6 +358,11 @@ function mapRawJson(actor, rawJson) {
})
}
json.kampfwerte = combatValues
mapSkills(actor, held, combatValues)
mapSpells(actor, held)
mapMiracles(actor, liturgies)
let notes = []
for (let note in held.kommentare) {
note = held.kommentare[note]