Skip to content

Commit

Permalink
[foundryvtt#2548] Update ScaleValueAdvancement to work with backgrounds
Browse files Browse the repository at this point in the history
  • Loading branch information
arbron committed Nov 6, 2023
1 parent b017426 commit 034e7ed
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 8 deletions.
4 changes: 3 additions & 1 deletion module/applications/advancement/scale-value-config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ export default class ScaleValueConfig extends AdvancementConfig {
*/
_prepareLevelData() {
let lastValue = null;
return Array.fromRange(CONFIG.DND5E.maxLevel + 1).slice(1).reduce((obj, level) => {
let levels = Array.fromRange(CONFIG.DND5E.maxLevel + 1);
if ( ["class", "subclass"].includes(this.advancement.parent.type ) ) levels = levels.slice(1);
return levels.reduce((obj, level) => {
obj[level] = { placeholder: this._formatPlaceholder(lastValue), value: null };
const value = this.advancement.configuration.scale[level];
if ( value ) {
Expand Down
10 changes: 6 additions & 4 deletions module/documents/actor/actor.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import Proficiency from "./proficiency.mjs";
import * as Trait from "./trait.mjs";
import ScaleValueAdvancement from "../advancement/scale-value.mjs";
import { d20Roll } from "../../dice/dice.mjs";
import { simplifyBonus } from "../../utils.mjs";
import ShortRestDialog from "../../applications/actor/short-rest.mjs";
import LongRestDialog from "../../applications/actor/long-rest.mjs";
import * as Trait from "./trait.mjs";

/**
* Extend the base Actor class to implement additional system-specific logic.
Expand Down Expand Up @@ -234,9 +235,10 @@ export default class Actor5e extends Actor {
* @protected
*/
_prepareScaleValues() {
this.system.scale = Object.entries(this.classes).reduce((scale, [identifier, cls]) => {
scale[identifier] = cls.scaleValues;
if ( cls.subclass ) scale[cls.subclass.identifier] = cls.subclass.scaleValues;
this.system.scale = this.items.reduce((scale, item) => {
if ( ScaleValueAdvancement.metadata.validItemTypes.has(item.type) ) {
scale[item.identifier] = item.scaleValues;
}
return scale;
}, {});
}
Expand Down
2 changes: 1 addition & 1 deletion module/documents/advancement/scale-value.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export default class ScaleValueAdvancement extends Advancement {
title: game.i18n.localize("DND5E.AdvancementScaleValueTitle"),
hint: game.i18n.localize("DND5E.AdvancementScaleValueHint"),
multiLevel: true,
validItemTypes: new Set(["class", "subclass"]),
validItemTypes: new Set(["background", "class", "subclass"]),
apps: {
config: ScaleValueConfig,
flow: ScaleValueFlow
Expand Down
5 changes: 3 additions & 2 deletions module/documents/item.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,9 @@ export default class Item5e extends Item {
* @type {object}
*/
get scaleValues() {
if ( !["class", "subclass"].includes(this.type) || !this.advancement.byType.ScaleValue ) return {};
const level = this.type === "class" ? this.system.levels : this.class?.system.levels ?? 0;
if ( !this.advancement.byType.ScaleValue ) return {};
const level = this.type === "class" ? this.system.levels : this.type === "subclass" ? this.class?.system.levels
: this.parent?.system.details.level ?? 0;
return this.advancement.byType.ScaleValue.reduce((obj, advancement) => {
obj[advancement.identifier] = advancement.valueForLevel(level);
return obj;
Expand Down

0 comments on commit 034e7ed

Please sign in to comment.