This commit is contained in:
WBHarry 2026-04-19 20:58:34 +02:00
parent 1fea8438ba
commit 7af3f07a26
14 changed files with 260 additions and 16 deletions

View file

@ -303,7 +303,13 @@ export default class DhCharacter extends DhCreature {
initial: null,
label: 'DAGGERHEART.ACTORS.Character.defaultDisadvantageDice'
}),
})
}),
comboDieIndex: new fields.NumberField({
integer: true,
min: 0,
max: 5,
initial: 0,
})
})
};
}
@ -447,6 +453,19 @@ export default class DhCharacter extends DhCreature {
return attack;
}
get levelupTiers() {
const tierData = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.LevelTiers);
for (const tierKey of Object.keys(this.class?.value?.system.levelupOptionTiers ?? {})) {
const tier = this.class.value.system.levelupOptionTiers[tierKey];
for (const optionKey of Object.keys(tier)) {
const option = tier[optionKey];
tierData.tiers[tierKey].options[optionKey] = option;
}
}
return tierData;
}
/* All items are valid on characters */
isItemValid() {
return true;
@ -745,6 +764,9 @@ export default class DhCharacter extends DhCreature {
}
});
break;
case 'comboStrikes':
this.rules.comboDieIndex += 1;
break;
}
}
}

View file

@ -3,6 +3,7 @@ import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs';
import ForeignDocumentUUIDArrayField from '../fields/foreignDocumentUUIDArrayField.mjs';
import ItemLinkFields from '../fields/itemLinkFields.mjs';
import { addLinkedItemsDiff, getFeaturesHTMLData, updateLinkedItemApps } from '../../helpers/utils.mjs';
import { DhLevelOption } from '../levelTier.mjs';
export default class DHClass extends BaseDataItem {
/** @inheritDoc */
@ -10,7 +11,8 @@ export default class DHClass extends BaseDataItem {
return foundry.utils.mergeObject(super.metadata, {
label: 'TYPES.Item.class',
type: 'class',
hasDescription: true
hasDescription: true,
hasLevelUpOptions: true,
});
}
@ -51,7 +53,10 @@ export default class DHClass extends BaseDataItem {
}),
backgroundQuestions: new fields.ArrayField(new fields.StringField(), { initial: ['', '', ''] }),
connections: new fields.ArrayField(new fields.StringField(), { initial: ['', '', ''] }),
isMulticlass: new fields.BooleanField({ initial: false })
isMulticlass: new fields.BooleanField({ initial: false }),
levelupOptionTiers: new fields.TypedObjectField(new fields.TypedObjectField(new fields.EmbeddedDataField(DhLevelOption)), {
initial: { 2: {}, 3: {}, 4: {} }
}),
};
}

View file

@ -43,17 +43,40 @@ class DhLevelTier extends foundry.abstract.DataModel {
}
}
class DhLevelOption extends foundry.abstract.DataModel {
export class DhLevelOption extends foundry.abstract.DataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
label: new fields.StringField({ required: true }),
checkboxSelections: new fields.NumberField({ required: true, integer: true, initial: 1 }),
minCost: new fields.NumberField({ required: true, integer: true, initial: 1 }),
type: new fields.StringField({ required: true, choices: LevelOptionType }),
value: new fields.NumberField({ integer: true }),
amount: new fields.NumberField({ integer: true })
label: new fields.StringField({
required: true,
label: 'DAGGERHEART.GENERAL.label'
}),
checkboxSelections: new fields.NumberField({
required: true,
integer: true,
initial: 1,
label: 'DAGGERHEART.CONFIG.LevelupData.checkboxSelections'
}),
minCost: new fields.NumberField({
required: true,
integer: true,
initial: 1,
label: 'DAGGERHEART.CONFIG.LevelupData.minCost'
}),
type: new fields.StringField({
required: true,
choices: LevelOptionType,
label: 'DAGGERHEART.GENERAL.type'
}),
value: new fields.NumberField({
integer: true,
label: 'DAGGERHEART.GENERAL.value'
}),
amount: new fields.NumberField({
integer: true,
label: 'DAGGERHEART.GENERAL.amount'
})
};
}
}
@ -113,6 +136,13 @@ export const CompanionLevelOptionType = {
}
};
export const ClassLevelOptionTypes = {
comboStrikes: {
id: 'comboStrikes',
label: 'Increase your Combo Die size',
},
};
export const LevelOptionType = {
trait: {
id: 'trait',
@ -162,6 +192,7 @@ export const LevelOptionType = {
id: 'multiclass',
label: 'Multiclass'
},
...ClassLevelOptionTypes,
...CompanionLevelOptionType
};